O comando CREATE EXTERNAL DATABASE mapeia uma fonte de dados externa — MaxCompute ou um data lake do Data Lake Formation (DLF) — em uma instância Hologres como um único objeto de banco de dados. Após o mapeamento, consulte tabelas externas pelo caminho de três partes ext_db.schema.table, execute consultas federadas entre dados internos e externos e gerencie todos os metadados em um único local.
Os bancos de dados externos têm visibilidade global na instância Hologres; portanto, qualquer banco de dados interno pode referenciá-los. Conecte-se diretamente a um banco de dados externo para executar instruções SQL e definir parâmetros do Grand Unified Configuration (GUC).
Compatível com Hologres V3.0 e versões posteriores.
Escolha sua fonte de dados
As duas fontes de dados compatíveis funcionam de maneiras diferentes. Selecione a opção adequada antes de escrever a instrução.
|
MaxCompute |
DLF |
|
|
Conexão |
Um projeto MaxCompute |
Um catálogo DLF (formato Paimon) |
|
Local de armazenamento |
Armazenamento do MaxCompute |
Object Storage Service (OSS) gerenciado pelo DLF |
|
Formatos compatíveis |
Nativo do MaxCompute |
Paimon (gerenciado pelo DLF); Paimon, Apache Hudi, Delta Lake, ORC, Parquet, CSV, SequenceFile (DLF V1.0) |
|
Cenário recomendado |
Dados armazenados em projetos MaxCompute |
Dados armazenados em data lakes no OSS gerenciados pelo DLF |
O Hologres utiliza o mecanismo proprietário High-QPS Engine (HQE) para leituras e gravações de alto desempenho em formatos de data lake, como Paimon, Hudi e DeltaLake.
Pré-requisitos
Configuração da instância
Ative a aceleração de data lake na instância antes de executar CREATE EXTERNAL DATABASE:
Abra o console do Hologres e acesse a página Instance List ou Instance Details.
Localize a instância desejada e clique em Data Lake Acceleration na coluna Actions.
Clique em Confirm na caixa de diálogo.
Ativação de serviços
DLF: Ative o serviço DLF. Consulte Início rápido e Regiões e endpoints disponíveis.
DLF V1.0: Ative também o Object Storage Service (OSS) e conclua a autorização do OSS. Sem as permissões necessárias no OSS, as consultas falharão mesmo que a tabela externa seja criada com sucesso. Consulte Política de bucket.
OSS-HDFS (opcional): Ative o serviço OSS-HDFS caso pretenda utilizar o armazenamento OSS-HDFS. Consulte Ativar o serviço OSS-HDFS.
Permissões
A conta que executa
CREATE EXTERNAL DATABASEdeve ter permissões de Superuser no Hologres.O MaxCompute ou o DLF controlam as permissões sobre os dados externos (tabelas, schemas), e não o Hologres. Conceda à função vinculada ao serviço (SLR)
AliyunServiceRoleForHologresIdentityMgmtas permissões necessárias antes de acessar dados externos. Consulte Função vinculada ao serviço do Hologres.Para utilizar uma função RAM em vez da SLR, consulte Visão geral de funções RAM.
Para contas fora da Alibaba Cloud e usuários RAM (por exemplo, contas Hologres BASIC), utilize
CREATE USER MAPPINGpara vincular e autorizar a conta. Consulte CREATE USER MAPPING.
Limitações
O acesso entre bancos de dados é unidirecional. Quando conectado a um banco de dados interno, acesse tabelas externas pelo caminho completo
ext_db.schema.table. Se estiver conectado diretamente a um banco de dados externo, as tabelas do banco de dados interno ficarão inacessíveis.O TTL do cache de metadados é fixo em 5 minutos. O Hologres armazena metadados externos em cache por 5 minutos para melhorar o desempenho. Esse valor não é configurável. Para forçar uma atualização, use a instrução
REFRESH CACHEdescrita em Atualizar metadados externos.MaxCompute: apenas projetos internos são compatíveis. Não é possível mapear projetos externos do MaxCompute.
Sintaxe
Fonte de dados MaxCompute
CREATE EXTERNAL DATABASE <ext_database_name> WITH
metastore_type 'maxcompute'
mc_project '<project_name>'
[comment '<description>'];
Parâmetros
|
Parâmetro |
Obrigatório |
Descrição |
|
|
Sim |
Tipo de metastore. Defina como |
|
|
Sim |
Nome do projeto MaxCompute a ser mapeado. Apenas projetos internos do MaxCompute são compatíveis. |
|
|
Não |
Descrição do banco de dados externo. |
Fonte de dados DLF
Atualmente, o DLF oferece suporte apenas ao modo de armazenamento gerenciado e ao tipo de catálogo Paimon. Definametastore_typecomodlf-restecatalog_typecomopaimon. A autenticação usa por padrão a SLR (AliyunServiceRoleForHologresIdentityMgmt). Para usar uma função RAM, configure-a viaCREATE USER MAPPING.
CREATE EXTERNAL DATABASE <ext_database_name> WITH
catalog_type 'paimon'
metastore_type 'dlf-rest'
dlf_catalog '<dlf_catalog_name>'
[comment '<description>'];
Parâmetros
|
Parâmetro |
Obrigatório |
Descrição |
|
|
Sim |
Tipo de metastore para a fonte de dados DLF. Defina como |
|
|
Sim |
Formato da tabela de lake. Defina como |
|
|
Sim |
Nome do catálogo DLF a ser mapeado. |
|
|
Não |
Descrição do banco de dados externo. |
Fonte de dados DLF V1.0
O DLF V1.0 oferece suporte a armazenamento OSS personalizado e formatos adicionais: Paimon, Apache Hudi, Delta Lake, ORC, Parquet, CSV e SequenceFile. Consulte Aceleração de data lake . O DLF V1.0 não oferece suporte à autenticação via SLR ou função RAM. Utilize CREATE USER MAPPING para fornecer credenciais por usuário.
CREATE EXTERNAL DATABASE <ext_database_name> WITH
metastore_type 'dlf'
dlf_region '<region>'
dlf_endpoint '<dlf_endpoint>'
dlf_catalog '<catalog_name>'
oss_endpoint '<oss_endpoint>'
[comment '<description>'];
Parâmetros
|
Parâmetro |
Obrigatório |
Descrição |
Exemplo |
|
|
Sim |
Tipo de metastore. Defina como |
|
|
|
Não |
Formato da tabela de lake. O DLF V1.0 oferece suporte a Paimon, Hudi, Delta Lake, ORC, Parquet, CSV e SequenceFile. Não é obrigatório para DLF V1.0. |
|
|
|
Sim |
Região onde o serviço DLF está implantado. Formato: |
|
|
|
Sim |
Endpoint de rede interna para acesso ao DLF. Formato: |
|
|
|
Sim |
Nome do catálogo DLF a ser mapeado. |
|
|
|
Sim |
AccessKey ID para acesso ao DLF. Forneça via |
— |
|
|
Sim |
AccessKey secret para acesso ao DLF. Forneça via |
— |
|
|
Sim |
Endpoint para acesso ao OSS. Use o endpoint interno para melhor desempenho. Para OSS-HDFS, utilize o endpoint interno do OSS-HDFS. Consulte Obter o nome de domínio do OSS-HDFS. |
|
|
|
Sim |
AccessKey ID para acesso ao OSS. Forneça via |
— |
|
|
Sim |
AccessKey secret para acesso ao OSS. Forneça via |
— |
|
|
Não |
Descrição do banco de dados externo. |
— |
Exemplos
Fonte de dados MaxCompute
Ao mapear um projeto MaxCompute que utiliza um modelo de duas camadas, o Hologres o exibe como uma estrutura de três camadas:ext_db.schema.mc_table. O nome do schema assume por padrão o valordefault. Por exemplo:SELECT * FROM ext_db.default.mc_table.
-- Create an external database for a MaxCompute project.
CREATE EXTERNAL DATABASE ext_database_mc WITH
metastore_type 'maxcompute'
mc_project 'mc_3_layer_project'
comment 'mc three layer project';
-- Query a table in the external database.
SELECT * FROM ext_database_mc.mc_schema.mc_table;
Fonte de dados DLF
-- Create an external database for a DLF Paimon catalog.
CREATE EXTERNAL DATABASE ext_database_dlf WITH
metastore_type 'dlf-rest'
catalog_type 'paimon'
dlf_catalog 'dlf_paimon_catalog'
comment 'DLF paimon catalog';
-- Query a table in the external database.
SELECT * FROM ext_database_dlf.dlf_db.paimon_table;
Fonte de dados DLF V1.0
O DLF V1.0 exige um par de AccessKey tanto para o DLF quanto para o OSS. Forneça as credenciais usando CREATE USER MAPPING em vez de incorporá-las na instrução CREATE EXTERNAL DATABASE.
-- Create an external database.
CREATE EXTERNAL DATABASE ext_database_dlf1 WITH
metastore_type 'dlf'
dlf_region 'cn-beijing'
dlf_endpoint 'dlf-share.cn-beijing.aliyuncs.com'
dlf_catalog 'hive_catalog'
oss_endpoint 'oss-cn-beijing-internal.aliyuncs.com'
comment 'DLF1.0 hive catalog';
-- Bind credentials for the current user.
CREATE USER MAPPING FOR current_user
EXTERNAL DATABASE ext_database_dlf1
OPTIONS
(
dlf_access_id 'LTxxxxxxxxxx',
dlf_access_key 'y8xxxxxxxxxxxxx',
oss_access_id 'LTxxxxxxxxxx',
oss_access_key 'y8xxxxxxxxxxxxx'
);
-- Query a table in the external database.
SELECT * FROM ext_database_dlf1.dlf_db.hive_table;
Mais operações
Visualize todos os bancos de dados externos
SELECT database_name, options FROM hologres.hg_external_databases();
Atualizar metadados externos
Force uma atualização imediata dos metadados em vez de aguardar a expiração do cache:
REFRESH CACHE FOR EXTERNAL DATABASE <EXT_DB_NAME> WITH (cache_level = 'metadata');
Modifique o intervalo de atualização de metadados
O parâmetro metadata_refresh_interval_sec controla o intervalo de atualização completa do schema por nó frontend (FE). O valor padrão é 7.200 segundos. Ajuste-o com:
ALTER EXTERNAL DATABASE <EXT_DB_NAME> WITH metadata_refresh_interval_sec 1800;