Todos os produtos
Search
Central de documentação

MaxCompute:VALUES

Última atualização: Jun 26, 2026

Use INSERT ... VALUES ou VALUES TABLE para inserir diretamente um pequeno número de linhas em uma tabela do MaxCompute. Essa abordagem é comum durante as fases de desenvolvimento e testes.

Para conjuntos de dados maiores (dezenas de linhas ou mais), use comandos Tunnel para carregar um arquivo TXT ou CSV. Consulte Importar dados para tabelas .

Pré-requisitos

Antes de começar, verifique se você tem:

  • Permissão ALTER na tabela de destino

  • Permissão DESCRIBE nos metadados da tabela source

Para obter detalhes, consulte Permissões do MaxCompute.

Plataformas compatíveis

Execute estas instruções em qualquer uma das plataformas a seguir:

Operações

Operação

Quando usar

INSERT ... VALUES

Insira algumas linhas ou dezenas delas em uma tabela de teste durante a fase de validação

VALUES TABLE

Realize cálculos simples sobre dados inline. Compatível com instruções INSERT e comandos de linguagem de manipulação de dados (DML)

Limitações

Ao usar INSERT ... VALUES ou VALUES TABLE, não há suporte para INSERT OVERWRITE com especificação de colunas. Use INSERT INTO como alternativa.

Sintaxe

INSERT ... VALUES

INSERT INTO TABLE <table_name>
[PARTITION (<pt_spec>)][(<col1_name>, <col2_name>, ...)]
VALUES (<col1_value>, <col2_value>, ...), (<col1_value>, <col2_value>, ...), ...

VALUES TABLE

VALUES (<col1_value>, <col2_value>, ...), (<col1_value>, <col2_value>, ...) <table_name> (<col1_name>, <col2_name>, ...) ...

Parâmetros

Parâmetro

Obrigatório

Descrição

table_name

Sim

Nome de uma tabela existente onde os dados serão inseridos

pt_spec

Não

Partição de destino. Formato: (partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...). Obrigatório ao inserir dados em uma tabela particionada

col_name

Não

Nome da coluna de destino

col_value

Não

Valor a ser inserido. Aceita literais, expressões constantes ou expressões não constantes (como funções integradas ou expressões de função definida pelo usuário - UDF). Colunas não listadas em col_name assumem NULL por padrão

Notas de uso

Tipos de valor compatíveis com VALUES

  • Literais (string, inteiro, decimal)

  • Expressões constantes

  • Expressões não constantes, incluindo funções integradas e expressões UDF

Tipos de valor incompatíveis com VALUES

Os itens a seguir não podem ser usados diretamente em uma lista VALUES. Use uma expressão SELECT como alternativa:

  • Tipos de dados complexos, exceto ARRAY. Para inserir dados ARRAY, use SELECT com ARRAY() — consulte Inserir dados ARRAY.

Tipos de data e hora

Para inserir dados DATETIME ou TIMESTAMP, especifique o prefixo do tipo de dado em VALUES. Por exemplo: datetime'2017-11-11 00:00:00' ou TIMESTAMP'2017-11-11 00:00:00.123456789'.

Exemplos

Inserir linhas em uma partição específica

Crie uma tabela particionada e insira três linhas em uma partição nomeada.

-- Create a partitioned table named srcp.
CREATE TABLE IF NOT EXISTS srcp (key STRING, value BIGINT) PARTITIONED BY (p STRING);

-- Add the abc partition to the srcp table.
ALTER TABLE srcp ADD IF NOT EXISTS PARTITION (p='abc');

-- Insert three rows into the abc partition.
INSERT INTO TABLE srcp PARTITION (p='abc') VALUES ('a', 1), ('b', 2), ('c', 3);

-- Query the partition to verify.
SELECT * FROM srcp WHERE p='abc';

-- Return result
+------------+------------+------------+
| key        | value      | p          |
+------------+------------+------------+
| a          | 1          | abc        |
| b          | 2          | abc        |
| c          | 3          | abc        |
+------------+------------+------------+

Inserir linhas com valores de partição inline

Especifique o valor da coluna de partição diretamente na lista VALUES, em vez de usar a cláusula PARTITION.

-- Create a partitioned table named srcp.
CREATE TABLE IF NOT EXISTS srcp (key STRING, value BIGINT) PARTITIONED BY (p STRING);

-- Insert rows and derive the partition value from the VALUES list.
INSERT INTO TABLE srcp PARTITION (p)(key, p) VALUES ('d', '20170101'), ('e', '20170101'), ('f', '20170101');

-- Query the partition to verify.
SELECT * FROM srcp WHERE p='20170101';

-- Return result
+------------+------------+------------+
| key        | value      | p          |
+------------+------------+------------+
| d          | NULL       | 20170101   |
| e          | NULL       | 20170101   |
| f          | NULL       | 20170101   |
+------------+------------+------------+
A coluna value não consta na lista de colunas; portanto, seu valor padrão é NULL.

Inserir dados ARRAY

Como literais ARRAY não são aceitos diretamente em VALUES, use uma expressão SELECT com ARRAY() como alternativa.

-- Create a partitioned table named srcp.
CREATE TABLE IF NOT EXISTS srcp (key STRING, value ARRAY<INT>) PARTITIONED BY (p STRING);

-- Add the abc partition to the srcp table.
ALTER TABLE srcp ADD IF NOT EXISTS PARTITION (p='abc');

-- Insert an ARRAY value using a SELECT expression.
INSERT INTO TABLE srcp PARTITION (p='abc') SELECT 'a', ARRAY(1, 2, 3);

-- Query the partition to verify.
SELECT * FROM srcp WHERE p='abc';

-- Return result
+------------+------------+------------+
| key        | value      | p          |
+------------+------------+------------+
| a          | [1,2,3]    | abc        |
+------------+------------+------------+

Inserir dados DATETIME e TIMESTAMP

Adicione o nome do tipo de dado como prefixo aos literais de data e hora para evitar erros de inferência de tipo.

-- Create a partitioned table named srcp.
CREATE TABLE IF NOT EXISTS srcp (key STRING, value TIMESTAMP) PARTITIONED BY (p STRING);

-- Add the abc partition to the srcp table.
ALTER TABLE srcp ADD IF NOT EXISTS PARTITION (p='abc');

-- Insert DATETIME and TIMESTAMP values with explicit type prefixes.
INSERT INTO TABLE srcp PARTITION (p='abc') VALUES (datetime'2017-11-11 00:00:00', TIMESTAMP'2017-11-11 00:00:00.123456789');

-- Query the partition to verify.
SELECT * FROM srcp WHERE p='abc';

-- Return result
+------------------------+-------------------------+------------+
| key                    | value                   | p          |
+------------------------+-------------------------+------------+
| 2017-11-11 00:00:00    | 2017-11-11 00:00:00.123 | abc        |
+------------------------+-------------------------+------------+

Usar VALUES TABLE com colunas computadas

Referencie os valores inline como uma tabela nomeada e aplique funções durante a execução do INSERT.

-- Create a partitioned table named srcp.
CREATE TABLE IF NOT EXISTS srcp (key STRING, value BIGINT) PARTITIONED BY (p STRING);

-- Insert data with computed expressions derived from an inline VALUES table t(a, b).
INSERT INTO TABLE srcp PARTITION (p)
SELECT concat(a, b), length(a) + length(b), '20170102'
FROM VALUES ('d', 4), ('e', 5), ('f', 6) t(a, b);

-- Query the partition to verify.
SELECT * FROM srcp WHERE p='20170102';

-- Return result
+------------+------------+------------+
| key        | value      | p          |
+------------+------------+------------+
| d4         | 2          | 20170102   |
| e5         | 2          | 20170102   |
| f6         | 2          | 20170102   |
+------------+------------+------------+

A construção VALUES (...) t(a, b) define uma tabela inline chamada t com as colunas a e b. Os tipos de dados são inferidos da lista VALUES: a é STRING e b é BIGINT.

Criar uma tabela de constantes sem UNION ALL

Use VALUES TABLE como uma alternativa concisa para encadeamentos de instruções SELECT ... UNION ALL.

-- These two statements are equivalent:
SELECT 1 c UNION ALL SELECT 2 c;

SELECT * FROM VALUES (1), (2) t(c);

-- Return result
+------------+
| c          |
+------------+
| 1          |
| 2          |
+------------+

Usar VALUES TABLE sem cláusula FROM

Com VALUES TABLE, é possível executar uma instrução SELECT que chama funções sem referenciar nenhuma tabela. A implementação subjacente seleciona dados de uma tabela VALUES anônima de linha única e zero colunas, eliminando a necessidade de uma tabela DUAL.

-- Create a partitioned table named srcp.
CREATE TABLE IF NOT EXISTS srcp (key STRING, value BIGINT) PARTITIONED BY (p STRING);

-- Insert a row computed entirely from built-in functions.
INSERT INTO TABLE srcp PARTITION (p)
SELECT ABS(-1), LENGTH('abc'), GETDATE();

-- Query all rows.
SET odps.sql.allow.fullscan=true;
SELECT * FROM srcp;

-- Return result
+------------+------------+---------------------+
| key        | value      | p                   |
+------------+------------+---------------------+
| 1          | 3          | 2024-12-10 16:58:56 |
+------------+------------+---------------------+

Usar expressões não constantes em VALUES

Passe chamadas de função diretamente como valores de coluna em uma lista VALUES.

SELECT * FROM VALUES (GETDATE()), (TO_DATE('20190101', 'yyyyMMdd')), (LASTDAY(DATETIME '2019-01-01 01:10:00')) t(d);

Resultado:

+---------------------+
| d                   |
+---------------------+
| 2019-01-31 00:00:00 |
| 2019-01-01 00:00:00 |
| 2024-12-10 16:52:36 |
+---------------------+