Use a instrução LOAD para carregar dados de armazenamentos externos (como OSS, Hologres, Amazon Redshift ou BigQuery) em uma tabela ou partição do MaxCompute.
Visão geral
O MaxCompute usa os comandos LOAD OVERWRITE ou LOAD INTO para importar dados em formato CSV ou outros formatos open-source de armazenamentos externos, como What is Hologres?, What is 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 particionamento dinâmico para carregar dados em tabelas particionadas.
O comando
LOAD INTOanexa dados a uma tabela ou partição. O comandoLOAD OVERWRITElimpa a tabela ou partição antes de inserir 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 project do MaxCompute. Para obter instruções, consulte MaxCompute permissions.
-
Permissões de armazenamento externo
Permissões do OSS: conceda ao MaxCompute permissões de acesso ao OSS (leitura e listagem de objetos). 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 RAM, conceda as permissões necessárias e adicione a função à instância do Hologres. Para detalhes, consulte Create a Hologres external table (STS mode).
Outras restrições
O comando LOAD não oferece suporte a parâmetros de lista de permissões/lista de bloqueios.
O armazenamento externo e o project do MaxCompute de destino devem estar na mesma região.
-
Ao carregar dados do OSS:
O schema da tabela particionada de destino (excluindo 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 carrega 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 demonstra como carregar dados usando um extrator integrado (StorageHandler). Pressupõe-se que o MaxCompute e o OSS pertençam à mesma conta Alibaba Cloud e mostra 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/de um bucket do OSS na regiãooss-cn-hangzhoue construa o caminho do diretório OSS. Para mais informações sobre como criar um bucket do OSS, consulte Create a bucket.O caminho do diretório OSS é construído a partir das 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 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 na 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 visualize 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 foram criados, e uma tabela foi criada no banco de dados.
Uma tabela externa do Hologres foi criada no MaxCompute. É possível consultar os dados na tabela do Hologres usando a tabela externa.
-- 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 desta tabela do Hologres em 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 ver 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 open-source
O tamanho de um único arquivo a ser carregado não pode exceder 3 GB. Se um arquivo for muito grande, divida-o antes de carregar.
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 diferentes da Alibaba Cloud, consulte Authorization in STS mode.
-
Salve o arquivo vehicle.textfile no diretório
mc-test/data_location/de um bucket do OSS na regiãooss-cn-hangzhoue construa o caminho do diretório OSS. Para mais informações sobre como criar um bucket do OSS, consulte Create a bucket.O caminho do diretório OSS é construído a partir das 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 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 na 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 seus 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/de um bucket do OSS na regiãooss-cn-hangzhou, respectivamente, e construa os caminhos dos diretórios OSS. Para mais informações sobre como criar um bucket do OSS, consulte Create a bucket.Os caminhos dos diretórios OSS são construídos a partir das 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 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 na 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 de seu grupo de recursos.
Referências
Para exportar dados de um project do MaxCompute para armazenamento externo, como OSS ou Hologres, para uso por outros mecanismos de computação, consulte UNLOAD.