Como otimizar a digitalização de 1 arquivo / tabela enorme no Hive para confirmar / verificar se o ponto longo lat está contido em uma forma de geometria wkt

Atualmente, estou tentando associar cada ping long lat de um dispositivo ao seu CEP.

Desnormalizei os dados de ping do dispositivo longo lat e criei uma tabela de junção de produto cruzado / produto cartesiano na qual cada linha possui o ST_Point (long, lat), geometry_shape_of_ZIP e o código postal associado a essa geometria. para fins de teste, tenho cerca de 45 milhões de linhas na tabela e aumentará a produção para cerca de 1 bilhão por dia.

Mesmo que os dados sejam nivelados e sem condições de junção, a consulta leva cerca de 2 horas para ser concluída. Existe alguma maneira mais rápida de calcular consultas espaciais? Ou como posso otimizar a seguinte consulta.

Inline são algumas das etapas de otimização que já realizei. Usando as otimizações, todas as outras operações são realizadas em no máximo 5 minutos, exceto nesta etapa. Estou usando o aws cluster 2 nós de mater e 5 nós de dados.

set hive.vectorized.execution.enabled = true;

set hive.execution.engine=tez;

set hive.enforce.sorting=true;

set hive.cbo.enable=true;

set hive.compute.query.using.stats=true;

set hive.stats.fetch.column.stats=true;

set hive.stats.fetch.partition.stats=true;

analyze table tele_us_zipmatch compute statistics for columns;

CREATE TABLE zipcheck (

`long4` double,

`lat4` double,

state_name string,

country_code string,

country_name string, region string,

zip int,

countyname string) PARTITIONED by (state_id string)

STORED AS ORC TBLPROPERTIES ("orc.compress" = "SNAPPY",

'orc.create.index'='true',

'orc.bloom.filter.columns'='');

INSERT OVERWRITE TABLE zipcheck PARTITION(state_id)

select long4, lat4, state_name, country_code, country_name, region, zip, countyname, state_id from tele_us_zipmatch

where ST_Contains(wkt_shape,zip_point)=TRUE;

ST_Contains é a função de esri (ref:https://github.com/Esri/spatial-framework-for-hadoop/wiki/UDF-Documentation#relationship-tests )

Qualquer ajuda é muito apreciada.

Obrigado.

questionAnswers(1)

yourAnswerToTheQuestion