Todos os produtos
Search
Central de documentação

MaxCompute:TABLESAMPLE

Última atualização: Aug 21, 2026

Use TABLESAMPLE para amostrar linhas de uma tabela sem examinar todo o conjunto de dados. Três métodos de amostragem estão disponíveis:

  • TABLESAMPLE (BUCKET x OUT OF y [ON col_name | RAND()]) — retorna um bucket dentre y partições de tamanho igual

  • TABLESAMPLE (n PERCENT) — retorna aproximadamente n% das linhas

  • TABLESAMPLE (m ROWS) — retorna até m linhas aleatoriamente

A amostragem baseada em porcentagem gera resultados aproximados. A porcentagem real pode diferir do valor especificado.

Sintaxe

Amostragem por bucket

TABLESAMPLE (BUCKET <x> OUT OF <y> [ON <col_name> | RAND()])

Parâmetro

Descrição

x

Bucket a amostrar. A numeração dos buckets começa em 1.

y

Número total de buckets para dividir os dados.

col_name

Uma ou mais colunas usadas para distribuir as linhas nos buckets. Especifique até 10 colunas em uma única cláusula ON. Obrigatório se a tabela não for clusterizada.

RAND()

Distribui as linhas nos buckets aleatoriamente, em vez de usar valores de coluna. Use quando nenhuma distribuição específica por coluna for necessária.

Para tabelas não clusterizadas, inclua ON col_name ou ON RAND().

Amostragem por porcentagem

TABLESAMPLE (<n> PERCENT)

O parâmetro n representa a porcentagem da amostragem. O resultado contém cerca de n% das linhas da tabela source. Esse valor não é exato.

Amostragem por linhas

TABLESAMPLE (<m> ROWS)

O valor m indica o número de linhas a retornar. Se a tabela source tiver menos linhas que m, todas as linhas serão retornadas. O valor máximo para m é 10.000.

Considerações sobre desempenho

  • Tabelas clusterizadas oferecem leitura mais rápida. Como os dados já estão pré-organizados em buckets, a amostragem por bucket acessa diretamente o bucket alvo e evita a varredura de dados irrelevantes.

  • Escolha valores de y alinhados ao número de buckets da tabela. Para uma tabela clusterizada com 32 buckets, defina y como um múltiplo de 32 (como 32, 64 ou 128) ou um divisor de 32 (como 16, 8 ou 4) para evitar leituras parciais de buckets.

Dados de exemplo

Os exemplos a seguir usam duas tabelas.

**BIGDATA_PUBLIC_DATASET.life_service.phoneno_basic_info_2020** — tabela dos conjuntos de dados públicos do MaxCompute. Para mais detalhes, consulte Overview.

**tblsample_test** — tabela clusterizada criada com os seguintes comandos:

-- Create the tblsample_test table.
CREATE TABLE tblsample_test(a bigint, b string, c string)
  CLUSTERED BY (a, c) SORTED by (a, c) INTO 32 BUCKETS;

-- Insert data into the table.
INSERT OVERWRITE TABLE tblsample_test VALUES
  (1,"b1","c1"),
  (2,"b2","c2"),
  (3,"b3","c3"),
  (4,"b4","c4");

-- Verify the inserted data.
SELECT * FROM tblsample_test;
-- Result:
-- +------------+----+-----+
-- | a          | b  | c   |
-- +------------+----+-----+
-- | 2          | b2 | c2  |
-- | 4          | b4 | c4  |
-- | 3          | b3 | c3  |
-- | 1          | b1 | c1  |
-- +------------+----+-----+

Exemplos

Exemplo 1: Amostragem por valores de coluna

Distribua as linhas em buckets com base nos valores das colunas e retorne as linhas de um bucket específico.

-- Sample bucket 1 out of 1,000,000 from the public dataset, bucketed by isp_code, phoneno, and province.
SELECT isp_code,
       phoneno,
       province
  FROM BIGDATA_PUBLIC_DATASET.life_service.phoneno_basic_info_2020
TABLESAMPLE (BUCKET 1 OUT OF 1000000 ON isp_code, phoneno, province) s;

-- Result:
-- +----------+---------+----------+
-- | isp_code | phoneno | province |
-- +----------+---------+----------+
-- | 185      | 1853500 | Shanxi   |
-- | 187      | 1878332 | Sichuan  |
-- +----------+---------+----------+

Exemplo 2: Amostragem com atribuição aleatória de buckets

Use RAND() para distribuir as linhas nos buckets aleatoriamente e retorne um bucket específico.

-- Sample bucket 3 out of 500,000 using random bucket assignment.
SELECT isp_code,
       phoneno,
       province
  FROM BIGDATA_PUBLIC_DATASET.life_service.phoneno_basic_info_2020
TABLESAMPLE (BUCKET 3 OUT OF 500000 ON RAND()) s;

-- Result:
-- +----------+---------+----------+
-- | isp_code | phoneno | province |
-- +----------+---------+----------+
-- | 131      | 1312224 | Shanghai  |
-- | 135      | 1353936 | Guangdong |
-- | 158      | 1586377 | Shandong  |
-- +----------+---------+----------+

Exemplo 3: Amostragem de tabela clusterizada sem especificar ON

Para tabelas clusterizadas, omita a cláusula ON. As linhas são obtidas diretamente do bucket pré-organizado.

SELECT a, b FROM tblsample_test TABLESAMPLE (BUCKET 1 OUT OF 2) AS ts;

-- Result:
-- +------------+----+
-- | a          | b  |
-- +------------+----+
-- | 2          | b2 |
-- +------------+----+
Nota

A tabela tblsample_test tem 32 buckets. Ao usar y = 2 (um divisor de 32), o MaxCompute recupera dados exatamente nos limites dos buckets, o que melhora o desempenho. Consulte Considerações sobre desempenho.

Exemplo 4: Amostragem por porcentagem

Retorne aproximadamente 50% das linhas de tblsample_test.

SELECT * FROM tblsample_test TABLESAMPLE (50 PERCENT) s;

-- Result:
-- +------------+----+----+
-- | a          | b  | c  |
-- +------------+----+----+
-- | 2          | b2 | c2 |
-- | 3          | b3 | c3 |
-- +------------+----+----+

Exemplo 5: Amostragem de um número fixo de linhas

Retorne 2 linhas de tblsample_test.

SELECT * FROM tblsample_test TABLESAMPLE (2 ROWS);

-- Result:
-- +------------+----+----+
-- | a          | b  | c  |
-- +------------+----+----+
-- | 2          | b2 | c2 |
-- | 3          | b3 | c3 |
-- +------------+----+----+