A partir da versão V3.0.38 do Hologres, é possível consultar tabelas Delta do MaxCompute diretamente no Hologres sem a necessidade de mover dados. Uma tabela Delta é um formato de tabela do MaxCompute voltado para dados incrementais. Esse formato permite a importação de dados em nível de minutos, utiliza o AliORC como formato de arquivo base, oferece suporte à semântica UPSERT e possibilita a leitura e gravação de dados incrementais no formato Change Data Capture (CDC). Para mais informações sobre os conceitos de tabelas Delta, consulte Termos.
Limitações
|
Funcionalidade |
Suporte |
|
Leitura do snapshot mais recente de uma tabela Delta |
Suportado |
|
Gravação de dados do Hologres em uma tabela Delta |
Não suportado |
Pré-requisitos
Antes de começar, certifique-se de que você possui:
Uma instância ativa do Hologres. Consulte Purchase a Hologres instance.
Um projeto ativo do MaxCompute. Consulte Activate MaxCompute.
As permissões necessárias no projeto e nas tabelas do MaxCompute. Consulte Manage user permissions using commands.
Etapa 1: Crie uma tabela Delta no MaxCompute
Crie uma tabela Delta no MaxCompute usando um dos seguintes métodos:
No DataWorks: anexe uma source de dados do MaxCompute e, em seguida, crie a tabela no console do DataWorks.
Usando a MaxCompute local client: execute o comando SQL diretamente.
O exemplo a seguir cria uma tabela Delta particionada chamada mf_dt:
CREATE TABLE IF NOT EXISTS mf_dt (
pk BIGINT NOT NULL PRIMARY KEY,
val BIGINT NOT NULL
)
PARTITIONED BY (dd STRING, hh STRING)
TBLPROPERTIES ("transactional"="true");
A propriedade "transactional"="true" marca a tabela como uma tabela Delta.
Etapa 2: Grave dados na tabela Delta
O MaxCompute oferece suporte a dois métodos para carregar dados em uma tabela Delta:
Batch: Use INSERT INTO ou INSERT OVERWRITE. Consulte Insert or overwrite data.
Near-real-time: Use o Flink para transmitir dados em streaming. Consulte Use Flink to write data to MaxCompute.
O exemplo a seguir usa inserções em lote para carregar dados na tabela mf_dt:
-- Append rows to the dd='01', hh='01' partition
INSERT INTO TABLE mf_dt PARTITION (dd='01', hh='01')
VALUES (3, 30), (4, 4), (5, 5);
-- Overwrite the dd='01', hh='01' partition with new data
INSERT OVERWRITE TABLE mf_dt PARTITION (dd='01', hh='01')
VALUES (1, 1), (2, 2), (3, 3);
Etapa 3: Mapeie o projeto do MaxCompute no Hologres
Crie um mapeamento de source de dados externa no Hologres para que ele possa descobrir e consultar as tabelas do MaxCompute. Há dois métodos de mapeamento disponíveis:
Banco de dados externo (External database): mapeia todas as tabelas em um projeto do MaxCompute com um único comando. Consulte CREATE EXTERNAL DATABASE.
Tabela externa (Foreign table): mapeia schemas e tabelas individuais para um controle mais refinado. Consulte IMPORT FOREIGN SCHEMA e CREATE FOREIGN TABLE.
O exemplo a seguir cria um mapeamento de banco de dados externo para um projeto do MaxCompute:
CREATE EXTERNAL DATABASE ext_database_mc WITH
metastore_type 'maxcompute'
mc_project 'mc_3_layer_project'
comment 'mc three layer project';
Após criar o mapeamento, verifique se é possível descobrir os schemas e as tabelas:
-- List all schemas in the external database
SELECT * FROM hologres.hg_external_schemas('ext_database_mc');
-- List all tables in the default schema
SELECT * FROM hologres.hg_external_tables('ext_database_mc', 'default');
Etapa 4: Consulte a tabela Delta
Antes de consultar uma tabela Delta, defina o seguinte parâmetro GUC no nível da sessão:
SET hg_experimental_external_catalog_routing = 'odps:common_table';
Em seguida, consulte a tabela usando o nome de três partes external_database.schema.table:
SELECT * FROM ext_database_mc.mc_schema_name.mf_dt;
Próximos passos
Atualize os metadados do banco de dados externo após alterações de schema no MaxCompute. Consulte CREATE EXTERNAL DATABASE.
Controle o acesso no nível da tabela usando tabelas externas (foreign tables) em vez de um banco de dados externo. Consulte CREATE FOREIGN TABLE.
Gerencie as permissões de usuário no MaxCompute. Consulte Manage user permissions using commands.