Todos los productos
Search
Centro de documentos

MaxCompute:DISTRIBUTED MAPJOIN

Última actualización: Sep 04, 2026

DISTRIBUTED MAPJOIN es una versión optimizada de MAPJOIN. Utilice DISTRIBUTED MAPJOIN cuando una tabla pequeña con una tabla grande. Tanto DISTRIBUTED MAPJOIN como MAPJOIN permiten reducir las operaciones de redistribución y ordenamiento en la tabla grande.

Notas de uso

  • Los tamaños de las tablas que desea unir deben ser diferentes. El tamaño de la tabla grande debe superar los 10 TB, mientras que el de la tabla pequeña debe estar en el rango de [1 GB, 100 GB].

  • Los datos de la tabla pequeña deben distribuirse uniformemente. Si una tabla pequeña presenta colas largas, se genera un volumen excesivo de datos en un solo fragmento. Como consecuencia, puede producirse un error de memoria insuficiente (OOM) o un problema de tiempo de espera en la llamada a procedimiento remoto (RPC).

  • Si una tarea SQL se ejecuta durante más de 20 minutos, utilice DISTRIBUTED MAPJOIN para optimizarla.

  • La ejecución de una tarea consume demasiados recursos. Por lo tanto, no ejecute tareas en un grupo de cuota pequeño.

    Nota

    Cambie el grupo de cuota en la página Quotas. Para obtener más información, consulte Manage quotas in the new MaxCompute console.

Uso de DISTRIBUTED MAPJOIN

Para usar DISTRIBUTED MAPJOIN en una instrucción SELECT, agregue la sugerencia /*+distmapjoin(<table_name>(shard_count=<n>,replica_count=<m>))*/ a la instrucción. Los parámetros shard_count y replica_count determinan el paralelismo de las tareas. Calcule el paralelismo con la siguiente fórmula: Parallelism = shard_count × replica_count.

  • Parámetros

    • table_name: nombre de la tabla pequeña que desea unir.

    • shard_count=<n>: número de fragmentos de datos de la tabla pequeña que desea unir. Los fragmentos de datos de la tabla pequeña se distribuyen en cada nodo de cómputo para su procesamiento. n especifica el número de fragmentos. En la mayoría de los casos, establezca este parámetro en un número impar.

      Nota
      • Especifique manualmente el parámetro shard_count. Estime su valor según el tamaño de la tabla pequeña. La cantidad estimada de datos que procesa un solo nodo de fragmento debe situarse en el rango de [200 MB, 500 MB].

      • Si establece el parámetro shard_count en un valor excesivamente alto, afectará negativamente el rendimiento y la estabilidad del procesamiento de datos. Si lo establece en un valor excesivamente bajo, puede producirse un error por uso excesivo de recursos de memoria.

    • replica_count=<m>: número de réplicas de la tabla pequeña. m especifica el número de réplicas. Valor predeterminado: 1.

      Nota

      Para reducir el exceso de solicitudes de acceso y evitar que una tarea completa falle por el fallo de un solo nodo, cree varias réplicas de datos en el mismo fragmento. Si un nodo se reinicia con frecuencia debido a un alto paralelismo de tareas o a un rendimiento inestable del entorno, aumente el valor del parámetro replica_count. Establezca este parámetro en 2 o 3.

  • Sintaxis

    -- Recommended: Specify shard_count. replica_count defaults to 1.
    /*+distmapjoin(a(shard_count=5))*/
    
    -- Recommended: Specify both shard_count and replica_count.
    /*+distmapjoin(a(shard_count=5,replica_count=2))*/
    
    -- Use DISTRIBUTED MAPJOIN for multiple small tables.
    /*+distmapjoin(a(shard_count=5,replica_count=2),b(shard_count=5,replica_count=2)) */
    
    -- Use DISTRIBUTED MAPJOIN and MAPJOIN together.
    /*+distmapjoin(a(shard_count=5,replica_count=2)),mapjoin(b)*/

Ejemplos

En este ejemplo se describe cómo utilizar DISTRIBUTED MAPJOIN al insertar datos en una tabla particionada llamada tmall_dump_lasttable.

  • Sintaxis de JOIN

    insert OVERWRITE table tmall_dump_lasttable partition(ds='20211130')
    select t1.*
    from
    (
        select nid, doc,type
        from search_ods.dump_lasttable where ds='20211203'
    )t1
    join
    (
        select distinct item_id
        from tbcdm.dim_tb_itm
        where ds='20211130'
        and bc_type='B'
        and is_online='Y'
    )t2
    on t1.nid=t2.item_id;
  • Sintaxis de DISTRIBUTED MAPJOIN

    insert OVERWRITE table tmall_dump_lasttable partition (ds='20211130')
    select /*+ distmapjoin(t2(shard_count=35)) */ t1.*
    from
    (
        select nid, doc, type
        from search_ods.dump_lasttable where ds='20211203'
    )t1
    join
    (
        select distinct item_id
        from tbcdm.dim_tb_itm
        where ds='20211130'
        and bc_type='B'
        and is_online='Y'
    )t2
    on t1.nid=t2.item_id;