Sql 基于从源表的一列向目标表插入多列优化查询

Sql 基于从源表的一列向目标表插入多列优化查询,sql,hive,query-optimization,hiveql,Sql,Hive,Query Optimization,Hiveql,我试图根据条件将值从一个表的一列插入另一个表的多列。我已经准备好了查询,但是它在MapReduce阶段的80%被卡住了 我正在使用Hive1.1.0。 目前,在执行查询之前,我在下面进行设置 set hive.exec.dynamic.partition.mode=nonstrict; set hive.exec.dynamic.partition=true; set parquet.compression=SNAPPY; set hive.support.quoted.identifiers=

我试图根据条件将值从一个表的一列插入另一个表的多列。我已经准备好了查询,但是它在MapReduce阶段的80%被卡住了

我正在使用Hive1.1.0。 目前,在执行查询之前,我在下面进行设置

set hive.exec.dynamic.partition.mode=nonstrict;
set hive.exec.dynamic.partition=true;
set parquet.compression=SNAPPY;
set hive.support.quoted.identifiers=none;
set mapreduce.map.speculative=false;
set mapreduce.reduce.speculative=false;
set hive.mapred.reduce.tasks.speculative.execution=false;
set mapreduce.map.memory.mb=15000;
set mapreduce.map.java.opts=-Xmx2400m;
set mapreduce.reduce.memory.mb=5000;
set mapreduce.reduce.java.opts=-Xmx2400m;
set mapreduce.input.fileinputformat.split.maxsize=1024000000;
set mapreduce.input.fileinputformat.split.minsize=1024000000;
set hive.exec.max.dynamic.partitions.pernode=1000;
请提供在配置单元中完美运行此查询的建议

      select 
        IDENTIFICADOR_ID,
        ESTADO,
        FECHA_ESTADO,
        MUNICIPIO_ID,
        TIPO_ID,
        NOMBRE_COMPLETO,
        VALOR_PLAN_FACTURACION,
        VALOR_ESTADO_SERVICIO,
        VALOR_PAQUETE,
        VALOR_ACCESP,
        VALOR_TIPO_BANDA_ANCHA,
        VALOR_VELOCIDAD_ACCESO,
        descripcion_ltcar,
        DESCRIPCION_PLAN_OPEN,
        ESTADO_FNX_PLANES_FACTURACION,
        load_date from(
        select a.IDENTIFICADOR_ID,
        a.ESTADO,
        a.FECHA_ESTADO,
        a.MUNICIPIO_ID,
        b.TIPO_ID,
        b.NOMBRE_COMPLETO,
        a1.valor as VALOR_PLAN_FACTURACION,
        b1.valor as VALOR_ESTADO_SERVICIO,
        c1.valor as VALOR_PAQUETE,
        d1.valor as VALOR_ACCESP,
        e1.valor as VALOR_TIPO_BANDA_ANCHA,
        m1.valor as VALOR_VELOCIDAD_ACCESO,
        d.descripcion_ltcar,
        e.DESCRIPCION_PLAN_OPEN,
        e.estado as ESTADO_FNX_PLANES_FACTURACION,
        '2019-05-22' as load_date from 
        db_trusted_common_zone.FNX_IDENTIFICADORES_bs as a,db_trusted_common_zone.FNX_LISTAS_TCARACTERISTICAS_bs d 
       right join  (select valor,IDENTIFICADOR_ID  
from db_trusted_common_zone.FNX_CONFIGURACIONES_IDENTIF_bs where caracteristica_id=2005)a1
on a1.IDENTIFICADOR_ID =  a.IDENTIFICADOR_ID
right join  (select valor,IDENTIFICADOR_ID  
from db_trusted_common_zone.FNX_CONFIGURACIONES_IDENTIF_bs where caracteristica_id=132 )b1 
on b1.IDENTIFICADOR_ID =  a.IDENTIFICADOR_ID
right join  (select valor,IDENTIFICADOR_ID  
from db_trusted_common_zone.FNX_CONFIGURACIONES_IDENTIF_bs where caracteristica_id=2879)c1
on c1.IDENTIFICADOR_ID =  a.IDENTIFICADOR_ID
right join  (select valor,IDENTIFICADOR_ID  
from db_trusted_common_zone.FNX_CONFIGURACIONES_IDENTIF_bs where caracteristica_id=2093)d1 
on d1.IDENTIFICADOR_ID =  a.IDENTIFICADOR_ID
right join  (select valor,IDENTIFICADOR_ID  
from db_trusted_common_zone.FNX_CONFIGURACIONES_IDENTIF_bs where caracteristica_id=120)e1 
on e1.IDENTIFICADOR_ID =  a.IDENTIFICADOR_ID
right join  (select valor,IDENTIFICADOR_ID  
from db_trusted_common_zone.FNX_CONFIGURACIONES_IDENTIF_bs where caracteristica_id=33)f1 
on f1.IDENTIFICADOR_ID =  a.IDENTIFICADOR_ID
right join  (select valor,IDENTIFICADOR_ID  
from db_trusted_common_zone.FNX_CONFIGURACIONES_IDENTIF_bs where caracteristica_id=4430)g1 
on g1.IDENTIFICADOR_ID =  a.IDENTIFICADOR_ID
right join  (select valor,IDENTIFICADOR_ID  
from db_trusted_common_zone.FNX_CONFIGURACIONES_IDENTIF_bs where caracteristica_id=2123)h1 
on h1.IDENTIFICADOR_ID =  a.IDENTIFICADOR_ID
right join  (select valor,IDENTIFICADOR_ID  
from db_trusted_common_zone.FNX_CONFIGURACIONES_IDENTIF_bs where caracteristica_id=4389)i1 
on i1.IDENTIFICADOR_ID =  a.IDENTIFICADOR_ID
right join  (select valor,IDENTIFICADOR_ID  
from db_trusted_common_zone.FNX_CONFIGURACIONES_IDENTIF_bs where caracteristica_id=201)j1 
on j1.IDENTIFICADOR_ID =  a.IDENTIFICADOR_ID
right join  (select valor,IDENTIFICADOR_ID  
from db_trusted_common_zone.FNX_CONFIGURACIONES_IDENTIF_bs where caracteristica_id=4388)k1 
on k1.IDENTIFICADOR_ID =  a.IDENTIFICADOR_ID
right join  (select valor,IDENTIFICADOR_ID  
from db_trusted_common_zone.FNX_CONFIGURACIONES_IDENTIF_bs where caracteristica_id=37)l1 
on l1.IDENTIFICADOR_ID =  a.IDENTIFICADOR_ID
right join  (select valor,IDENTIFICADOR_ID  
from db_trusted_common_zone.FNX_CONFIGURACIONES_IDENTIF_bs where caracteristica_id=124)m1
    on m1.IDENTIFICADOR_ID =  a.IDENTIFICADOR_ID
        inner join db_trusted_common_zone.FNX_CLIENTES_bs as b
        on a.CLIENTE_ID=b.CLIENTE_ID
        inner join db_trusted_common_zone.FNX_PLANES_FACTURACION_bs as e
        on a.PRODUCTO_ID=e.PRODUCTO_ID
        and a.SERVICIO_ID=e.SERVICIO_ID
        and a.EMPRESA_ID=e.EMPRESA_ID
        and a.MUNICIPIO_ID=e.MUNICIPIO_ID
        where a.TIPO_ELEMENTO_ID in ('CUENTA','TELEV','TO')
        and d.caracteristica_id=124)t

FNX_CONFIGURACIONES_IDENTIF_bs
只能连接一次,带有聚合的用例语句:

select 
    IDENTIFICADOR_ID,
    ESTADO,
    FECHA_ESTADO,
    MUNICIPIO_ID,
    TIPO_ID,
    NOMBRE_COMPLETO,
    VALOR_PLAN_FACTURACION,
    VALOR_ESTADO_SERVICIO,
    VALOR_PAQUETE,
    VALOR_ACCESP,
    VALOR_TIPO_BANDA_ANCHA,
    VALOR_VELOCIDAD_ACCESO,
    descripcion_ltcar,
    DESCRIPCION_PLAN_OPEN,
    ESTADO_FNX_PLANES_FACTURACION,
    load_date 
    from
    (
    select 
    a.IDENTIFICADOR_ID,
    a.ESTADO,
    a.FECHA_ESTADO,
    a.MUNICIPIO_ID,
    b.TIPO_ID,
    b.NOMBRE_COMPLETO,
    max(case when caracteristica_id=2005 then c.valor end) as VALOR_PLAN_FACTURACION,
    max(case when caracteristica_id=132  then c.valor end) as VALOR_ESTADO_SERVICIO,
    max(case when caracteristica_id=2879 then c.valor end) as VALOR_PAQUETE,
    max(case when caracteristica_id=2093 then c.valor end) as VALOR_ACCESP,
    max(case when caracteristica_id=120  then c.valor end) as VALOR_TIPO_BANDA_ANCHA,
    max(case when caracteristica_id=124  then c.valor end) as VALOR_VELOCIDAD_ACCESO,
    d.descripcion_ltcar,
    e.DESCRIPCION_PLAN_OPEN,
    e.estado as ESTADO_FNX_PLANES_FACTURACION,
    '2019-05-22' as load_date 
    from  db_trusted_common_zone.FNX_IDENTIFICADORES_bs as a, 
          db_trusted_common_zone.FNX_LISTAS_TCARACTERISTICAS_bs d --this join needs to be fixed, there is no ON condition. This is CROSS JOIN. It is acceptable if table d returns only one row
          inner join (select * from db_trusted_common_zone.FNX_CONFIGURACIONES_IDENTIF_bs c where caracteristica_id in (2005,132,2879,2093,120,124)) c on c.IDENTIFICADOR_ID =  a.IDENTIFICADOR_ID --join only one time with this table
          inner join db_trusted_common_zone.FNX_CLIENTES_bs as b on a.CLIENTE_ID=b.CLIENTE_ID
          inner join db_trusted_common_zone.FNX_PLANES_FACTURACION_bs as e on a.PRODUCTO_ID=e.PRODUCTO_ID
                                                                           and a.SERVICIO_ID=e.SERVICIO_ID
                                                                           and a.EMPRESA_ID=e.EMPRESA_ID
                                                                           and a.MUNICIPIO_ID=e.MUNICIPIO_ID
    where a.TIPO_ELEMENTO_ID in ('CUENTA','TELEV','TO')
      and d.caracteristica_id=124
    group by 
    a.IDENTIFICADOR_ID,
    a.ESTADO,
    a.FECHA_ESTADO,
    a.MUNICIPIO_ID,
    b.TIPO_ID,
    b.NOMBRE_COMPLETO,
    d.descripcion_ltcar,
    e.DESCRIPCION_PLAN_OPEN,
    e.estado as ESTADO_FNX_PLANES_FACTURACION
    )t 
同时加入
db\u trusted\u common\u zone。FNX\u LISTAS\u tcracteristicas\u bs
仍然需要修复。它是不带ON条件的,作为交叉连接使用。

此外,这些值太高:

set mapreduce.input.fileinputformat.split.maxsize=1024000000;
set mapreduce.input.fileinputformat.split.minsize=1024000000;

尝试减少x2甚至x4倍或更多,以增加并行度。

FNX\u CONFIGURACIONES\u identifit如果只能连接一次,则使用带有聚合的用例语句:

select 
    IDENTIFICADOR_ID,
    ESTADO,
    FECHA_ESTADO,
    MUNICIPIO_ID,
    TIPO_ID,
    NOMBRE_COMPLETO,
    VALOR_PLAN_FACTURACION,
    VALOR_ESTADO_SERVICIO,
    VALOR_PAQUETE,
    VALOR_ACCESP,
    VALOR_TIPO_BANDA_ANCHA,
    VALOR_VELOCIDAD_ACCESO,
    descripcion_ltcar,
    DESCRIPCION_PLAN_OPEN,
    ESTADO_FNX_PLANES_FACTURACION,
    load_date 
    from
    (
    select 
    a.IDENTIFICADOR_ID,
    a.ESTADO,
    a.FECHA_ESTADO,
    a.MUNICIPIO_ID,
    b.TIPO_ID,
    b.NOMBRE_COMPLETO,
    max(case when caracteristica_id=2005 then c.valor end) as VALOR_PLAN_FACTURACION,
    max(case when caracteristica_id=132  then c.valor end) as VALOR_ESTADO_SERVICIO,
    max(case when caracteristica_id=2879 then c.valor end) as VALOR_PAQUETE,
    max(case when caracteristica_id=2093 then c.valor end) as VALOR_ACCESP,
    max(case when caracteristica_id=120  then c.valor end) as VALOR_TIPO_BANDA_ANCHA,
    max(case when caracteristica_id=124  then c.valor end) as VALOR_VELOCIDAD_ACCESO,
    d.descripcion_ltcar,
    e.DESCRIPCION_PLAN_OPEN,
    e.estado as ESTADO_FNX_PLANES_FACTURACION,
    '2019-05-22' as load_date 
    from  db_trusted_common_zone.FNX_IDENTIFICADORES_bs as a, 
          db_trusted_common_zone.FNX_LISTAS_TCARACTERISTICAS_bs d --this join needs to be fixed, there is no ON condition. This is CROSS JOIN. It is acceptable if table d returns only one row
          inner join (select * from db_trusted_common_zone.FNX_CONFIGURACIONES_IDENTIF_bs c where caracteristica_id in (2005,132,2879,2093,120,124)) c on c.IDENTIFICADOR_ID =  a.IDENTIFICADOR_ID --join only one time with this table
          inner join db_trusted_common_zone.FNX_CLIENTES_bs as b on a.CLIENTE_ID=b.CLIENTE_ID
          inner join db_trusted_common_zone.FNX_PLANES_FACTURACION_bs as e on a.PRODUCTO_ID=e.PRODUCTO_ID
                                                                           and a.SERVICIO_ID=e.SERVICIO_ID
                                                                           and a.EMPRESA_ID=e.EMPRESA_ID
                                                                           and a.MUNICIPIO_ID=e.MUNICIPIO_ID
    where a.TIPO_ELEMENTO_ID in ('CUENTA','TELEV','TO')
      and d.caracteristica_id=124
    group by 
    a.IDENTIFICADOR_ID,
    a.ESTADO,
    a.FECHA_ESTADO,
    a.MUNICIPIO_ID,
    b.TIPO_ID,
    b.NOMBRE_COMPLETO,
    d.descripcion_ltcar,
    e.DESCRIPCION_PLAN_OPEN,
    e.estado as ESTADO_FNX_PLANES_FACTURACION
    )t 
同时加入
db\u trusted\u common\u zone。FNX\u LISTAS\u tcracteristicas\u bs
仍然需要修复。它是不带ON条件的,作为交叉连接使用。

此外,这些值太高:

set mapreduce.input.fileinputformat.split.maxsize=1024000000;
set mapreduce.input.fileinputformat.split.minsize=1024000000;

尝试减少x2甚至x4倍或更多以增加并行度。

是否可以在没有连接的情况下优化现有查询?否,不可能在没有连接的情况下进行优化。使用显式连接语法重写。更新了我的查询这与以前完全不同。wow@leftjoin您是否可以帮助提供一些修改以优化此功能?是否可以在不使用联接的情况下优化现有查询?否,不使用联接的情况下无法进行优化。使用显式连接语法重写。更新了我的查询这与以前完全不同。wow@leftjoin您能否提供一些修改来优化此项?进一步说,我可以通过更改联接顺序和使用中间表来优化它。@Durga还可以将此项和d.caracteristica_id=124移动到联接条件。但首先需要修复交叉连接。看起来ON条件丢失了。此外,我可以通过更改联接顺序和使用中间表来调整它。@Durga还可以将此和d.caracteristica_id=124移到ON条件下的联接。但首先需要修复交叉连接。看起来条件不见了