Use a instrução LOAD para carregar dados de armazenamentos de dados externos (como OSS, Hologres, Amazon Redshift ou BigQuery) em uma tabela ou partição do MaxCompute.
Visão geral
O MaxCompute usa o comando LOAD OVERWRITE ou LOAD INTO para importar dados em formato CSV ou outros formatos de código aberto a partir de armazenamentos externos, como Hologres, OSS, Amazon Redshift e BigQuery, para uma tabela ou partição do MaxCompute.
Importe primeiro os dados do Amazon Redshift e do BigQuery para o OSS antes de carregá-los no MaxCompute.
O MaxCompute usa o particionamento dinâmico para carregar dados em tabelas particionadas.
O comando
LOAD INTOanexa dados a uma tabela ou partição. O comandoLOAD OVERWRITElimpa primeiro a tabela ou partição e, em seguida, insere os novos dados.
Restrições
Requisitos de permissão
-
Permissões do MaxCompute
Permissões CreateTable e Alter: Necessárias para criar tabelas ou modificar dados de tabelas em um projeto do MaxCompute. Para obter instruções, consulte MaxCompute permissions.
-
Permissões de armazenamento externo
Permissões do OSS: Conceda as permissões de acesso ao OSS (leitura e listagem de objetos) ao MaxCompute. Para maior segurança, use o modo STS para autorização. Para mais informações, consulte Authorize access in STS mode.
Permissões do Hologres: Para autorizar o MaxCompute a acessar o Hologres, crie uma função do RAM, conceda a ela as permissões necessárias e adicione a função à instância do Hologres. Para obter detalhes, consulte Create a Hologres external table (STS mode).
Outras restrições
O comando LOAD não oferece suporte a parâmetros de allowlist/denylist.
O armazenamento externo e o projeto do MaxCompute de destino devem estar na mesma região.
-
Ao carregar dados do OSS:
O schema da tabela particionada de destino (exceto as colunas de partição) deve corresponder ao schema dos dados externos. O schema dos dados externos não deve incluir as colunas de partição.
-
Ao carregar dados do Hologres:
Não é possível carregar dados de uma tabela particionada do Hologres para o MaxCompute.
O MaxCompute não pode carregar dados de uma tabela externa do Hologres que use o modo de autorização de assinatura dupla.
Carregar dados
OSS and Hologres
Carregar dados do OSS ou Hologres
Sintaxe do comando
{LOAD OVERWRITE|INTO} TABLE <table_name> [PARTITION (<pt_spec>)]
FROM LOCATION <external_location>
STORED BY <StorageHandler>
[WITH SERDEPROPERTIES (<Options>)];
Parâmetros
OSS
Hologres
Exemplos
OSS
Este exemplo mostra como carregar dados com um extrator integrado (StorageHandler). O exemplo pressupõe que o MaxCompute e o OSS pertencem à mesma conta Alibaba Cloud e demonstra como carregar dados do arquivo vehicle.csv para o MaxCompute pela rede interna da Alibaba Cloud.
-
Salve o arquivo vehicle.csv no diretório
mc-test/data_location/em um bucket do OSS na regiãooss-cn-hangzhoue, em seguida, monte o caminho do diretório do OSS. Para mais informações sobre como criar um bucket do OSS, consulte Create a bucket.O caminho do diretório do OSS é montado com base nas informações de bucket, região e endpoint da seguinte forma:
oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-test/data_location/ -
Faça login no cliente do MaxCompute client (odpscmd) para criar a tabela de destino
ambulance_data_csv_load. Comando de exemplo:CREATE TABLE ambulance_data_csv_load ( vehicleId INT, recordId INT, patientId INT, calls INT, locationLatitude DOUBLE, locationLongitude DOUBLE, recordTime STRING, direction STRING ); -
Execute o comando
load overwritepara carregar o arquivovehicle.csvdo OSS para a tabela de destino. Comando de exemplo:LOAD OVERWRITE TABLE ambulance_data_csv_load FROM LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-test/data_location/' STORED BY 'com.aliyun.odps.CsvStorageHandler' WITH SERDEPROPERTIES ( -- The ARN of AliyunODPSDefaultRole. You can obtain it on the RAM role management page. 'odps.properties.rolearn'='acs:ram::xxxxx:role/aliyunodpsdefaultrole', 'odps.text.option.delimiter'=',' );Para ver o ARN de uma função, consulte View a RAM role.
-
Verifique os dados na tabela de destino
ambulance_data_csv_load. Comando de exemplo:-- Enable a full table scan. This setting is valid only for the current session. set odps.sql.allow.fullscan=true; SELECT * FROM ambulance_data_csv_load; -- The following result is returned: +------------+------------+------------+------------+------------------+-------------------+------------+------------+ | vehicleid | recordid | patientid | calls | locationlatitude | locationlongitude | recordtime | direction | +------------+------------+------------+------------+------------------+-------------------+------------+------------+ | 1 | 1 | 51 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | S | | 1 | 2 | 13 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | NE | | 1 | 3 | 48 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | NE | | 1 | 4 | 30 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | W | | 1 | 5 | 47 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | S | | 1 | 6 | 9 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | S | | 1 | 7 | 53 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | N | | 1 | 8 | 63 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | SW | | 1 | 9 | 4 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | NE | | 1 | 10 | 31 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | N | +------------+------------+------------+------------+------------------+-------------------+------------+------------+
Hologres
-
Cenário
Uma instância e um banco de dados do Hologres já foram criados, assim como uma tabela no banco de dados.
Uma tabela externa do Hologres também foi criada no MaxCompute, permitindo a consulta dos dados na tabela do Hologres por meio dela.
-- Query the Hologres external table: SELECT * FROM holo_ext; -- The following result is returned: +------------+------+ | id | name | +------------+------+ | 1 | abc | | 2 | ereg | +------------+------+ -
O exemplo a seguir mostra como usar o comando LOAD para carregar dados dessa tabela do Hologres para uma tabela interna do MaxCompute.
-
Crie uma tabela interna do MaxCompute.
-- Create an internal table. CREATE TABLE from_holo(id BIGINT, name STRING); -
Use o comando LOAD para carregar dados no MaxCompute.
-- Load data from the Hologres table into a MaxCompute internal table. LOAD INTO TABLE from_holo FROM LOCATION 'jdbc:postgresql://hgprecn-cn-wwo3ft0l****-cn-beijing-internal.hologres.aliyuncs.com:80/<YOUR_HOLO_DB_NAME>?application_name=MaxCompute¤tSchema=public&useSSL=false&table=<YOUR_HOLOGRES_TABLE_NAME>/' STORED BY 'com.aliyun.odps.jdbc.JdbcStorageHandler' WITH SERDEPROPERTIES ( 'odps.properties.rolearn'='acs:ram::18927322887*****:role/hologresrole', 'mcfed.mapreduce.jdbc.driver.class'='org.postgresql.Driver', 'odps.federation.jdbc.target.db.type'='holo' );
-
-
Consulte a tabela para conferir o resultado.
SELECT * FROM from_holo; -- The following result is returned: +------------+------+ | id | name | +------------+------+ | 2 | ereg | | 1 | abc | +------------+------+
Other open-source formats
Carregar dados em outros formatos de código aberto
O tamanho de um único arquivo a ser carregado não pode exceder 3 GB. Se o arquivo for muito grande, divida-o antes de carregá-lo.
Sintaxe do comando
{LOAD OVERWRITE|INTO} TABLE <table_name> [PARTITION (<pt_spec>)]
FROM LOCATION <external_location>
[ROW FORMAT SERDE '<serde_class>'
[WITH SERDEPROPERTIES (<Options>)]
]
STORED AS <file_format>;
Parâmetros
Exemplos
Same account
Mesma titularidade de conta
Este exemplo mostra como carregar dados do arquivo vehicle.textfile para o MaxCompute pela rede interna da Alibaba Cloud.
Se o MaxCompute e o OSS pertencerem a contas Alibaba Cloud diferentes, consulte Authorization in STS mode.
-
Salve o arquivo vehicle.textfile no diretório
mc-test/data_location/em um bucket do OSS na regiãooss-cn-hangzhoue, em seguida, monte o caminho do diretório do OSS. Para mais informações sobre como criar um bucket do OSS, consulte Create a bucket.O caminho do diretório do OSS é montado com base nas informações de bucket, região e endpoint da seguinte forma:
oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-test/data_location/ -
Faça login no cliente do MaxCompute client (odpscmd) para criar a tabela de destino
ambulance_data_textfile_load_pt. Comando de exemplo:CREATE TABLE ambulance_data_textfile_load_pt ( vehicleId STRING, recordId STRING, patientId STRING, calls STRING, locationLatitude STRING, locationLongitude STRING, recordTime STRING, direction STRING ) PARTITIONED BY ( ds STRING ); -
Execute o comando
load overwritepara carregar o arquivovehicle.textfiledo OSS para a tabela de destino. Comando de exemplo:LOAD OVERWRITE TABLE ambulance_data_textfile_load_pt PARTITION(ds='20200910') FROM LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-test/data_location/' ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' WITH SERDEPROPERTIES ('field.delim' = ',') STORED AS TEXTFILE; -
Verifique os dados na tabela de destino ambulance_data_textfile_load_pt. Comando de exemplo:
-- Enable a full table scan. This setting is valid only for the current session. SET odps.sql.allow.fullscan=true; SELECT * FROM ambulance_data_textfile_load_pt; -- The following result is returned: +-----------+----------+-----------+-------+------------------+-------------------+----------------+-----------+----------+ | vehicleid | recordid | patientid | calls | locationlatitude | locationlongitude | recordtime | direction | ds | +-----------+----------+-----------+-------+------------------+-------------------+----------------+-----------+----------+ | 1 | 1 | 51 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | S | 20200910 | | 1 | 2 | 13 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | NE | 20200910 | | 1 | 3 | 48 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | NE | 20200910 | | 1 | 4 | 30 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | W | 20200910 | | 1 | 5 | 47 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | S | 20200910 | | 1 | 6 | 9 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | S | 20200910 | | 1 | 7 | 53 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | N | 20200910 | | 1 | 8 | 63 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | SW | 20200910 | | 1 | 9 | 4 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | NE | 20200910 | | 1 | 10 | 31 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | N | 20200910 | +-----------+----------+-----------+-------+------------------+-------------------+----------------+-----------+----------+
Dynamic partitions
Carregar dados usando partições dinâmicas
Use partições dinâmicas para carregar dados quando os subdiretórios do OSS forem nomeados de acordo com pares chave-valor de partição, como ds=20200909/.
-
Salve os arquivos vehicle1.csv e vehicle2.csv nos diretórios
mc-test/data_location/ds=20200909/emc-test/data_location/ds=20200910/em um bucket do OSS na regiãooss-cn-hangzhou, respectivamente, e, em seguida, monte os caminhos do diretório do OSS. Para mais informações sobre como criar um bucket do OSS, consulte Create a bucket.Os caminhos do diretório do OSS são montados com base nas informações de bucket, região e endpoint da seguinte forma:
oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-test/data_location/ds=20200909/' oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-test/data_location/ds=20200910/' -
Faça login no cliente do MaxCompute client (odpscmd) para criar a tabela de destino
ambulance_data_csv_load_dynpt. Comando de exemplo:CREATE TABLE ambulance_data_csv_load_dynpt ( vehicleId STRING, recordId STRING, patientId STRING, calls STRING, locationLatitude STRING, locationLongitude STRING, recordTime STRING, direction STRING ) PARTITIONED BY ( ds STRING ); -
Execute o comando
load overwritepara carregar os arquivos do OSS para a tabela de destino. Comando de exemplo:LOAD OVERWRITE TABLE ambulance_data_csv_load_dynpt PARTITION(ds) FROM LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/mc-test/data_location/' ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' STORED AS TEXTFILE; -
Verifique os dados na tabela de destino
ambulance_data_csv_load_dynpt. Comando de exemplo:-- Enable a full table scan. This setting is valid only for the current session. SET odps.sql.allow.fullscan=true; SELECT * FROM ambulance_data_csv_load_dynpt; -- The following result is returned: +------------+------------+------------+------------+------------------+-------------------+----------------+------------+------------+ | vehicleid | recordid | patientid | calls | locationlatitude | locationlongitude | recordtime | direction | ds | +------------+------------+------------+------------+------------------+-------------------+----------------+------------+------------+ | 1 | 7 | 53 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | N | 20200909 | | 1 | 8 | 63 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | SW | 20200909 | | 1 | 9 | 4 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | NE | 20200909 | | 1 | 10 | 31 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | N | 20200909 | | 1 | 1 | 51 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | S | 20200910 | | 1 | 2 | 13 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | NE | 20200910 | | 1 | 3 | 48 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | NE | 20200910 | | 1 | 4 | 30 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | W | 20200910 | | 1 | 5 | 47 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | S | 20200910 | | 1 | 6 | 9 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | S | 20200910 | +------------+------------+------------+------------+------------------+-------------------+----------------+------------+------------+
Faturamento
O comando LOAD carrega dados externos no data warehouse. Embora não haja cobrança pelo volume de dados importados no modelo de pagamento conforme o uso ou por tarefas individuais no modelo de assinatura, todas as tarefas LOAD consomem recursos de computação do grupo de recursos.
Referências
Para exportar dados de um projeto do MaxCompute para um armazenamento externo, como OSS ou Hologres, para serem usados por outros mecanismos de computação, consulte UNLOAD.