O Hologres integra-se ao Alibaba Cloud Data Lake Formation (DLF) e ao Object Storage Service (OSS) para executar consultas SQL diretamente nos dados do seu data lake no OSS, sem movê-los para o Hologres. O Hologres processa a consulta na origem dos dados em vez de importá-los para o warehouse. Assim, você obtém análises SQL em grandes conjuntos de dados do OSS, evitando duplicação e custos de importação. Com tabelas externas, o Hologres mapeia seus dados do OSS no local original e os consulta via SQL padrão, mantendo-os no OSS.
O que você aprenderá
Neste tutorial, você aprenderá a:
Ativar o OSS, o DLF e o Hologres e carregar dados de teste
Configure o Hologres para conectar-se ao seu data lake no OSS
Consultar dados do OSS usando tabelas externas do Hologres (sem movimentação de dados)
Importar dados do OSS para tabelas internas do Hologres para obter maior desempenho nas consultas
Como funciona
O Hologres usa o mecanismo de foreign data wrapper (FDW) para conectar-se ao DLF, responsável por gerenciar os metadados do seu data lake no OSS. Ao consultar uma tabela externa, o Hologres lê os dados diretamente do OSS, sem necessidade de importação. O desempenho da consulta varia geralmente de segundos a minutos, dependendo do volume de dados.
Tabelas externas suportam dados armazenados no OSS nos seguintes formatos: Hudi, Delta, Paimon, ORC, Parquet, CSV e SequenceFile.
Para consultas consistentemente mais rápidas ou cargas de trabalho complexas com muitas junções, importe os dados para tabelas internas do Hologres. As tabelas internas armazenam dados dentro do Hologres, oferecendo melhor desempenho de consulta e maior throughput de processamento, mas geram custos adicionais de armazenamento. Consulte Faturamento.
Os seguintes serviços atuam em conjunto nesta solução:
|
Serviço |
Função |
|
Object Storage Service (OSS) |
Armazenamento de data lake — armazena os arquivos de dados brutos |
|
Data Lake Formation (DLF) |
Catálogo unificado de metadados — rastreia bancos de dados, tabelas e esquemas para dados no OSS |
|
Hologres |
Mecanismo de consulta — acelera análises em dados do OSS usando SQL |
Observações de uso
Clusters compartilhados do Hologres suportam apenas consultas a data lakes do OSS por meio de tabelas externas.
Pré-requisitos
Antes de começar, certifique-se de ter:
Uma conta Alibaba Cloud com permissões para ativar o OSS, o DLF e o Hologres
Acesso de superusuário à instância do Hologres (necessário para criar extensões e servidores externos)
Preparar o ambiente
Este tutorial usa a região China (Shanghai) como exemplo.
Etapa 1: Ativar o OSS e fazer upload dos dados de teste
-
Acesse a página de ativação do OSS e siga as instruções na tela para ativar o serviço.
NotaApós ativar o serviço OSS, o método de faturamento padrão é pagamento conforme o uso. Para reduzir custos, recomendamos comprar um plano de recursos.
Faça login no console do OSS e crie um bucket. Para detalhes, consulte Início rápido pelo console.
-
Baixe o arquivo tpch_10g_orc_3.zip e faça o upload dele para uma pasta no seu bucket.
O pacote contém apenas as tabelas
nation_orc,supplier_orcepartsupp_orcusadas neste tutorial. Após o upload, exclua quaisquer arquivos gerados pelo sistema, como.DS_Store.
Etapa 2: Ativar o DLF e importar metadados
Acesse a página de ativação do DLF e ative o serviço.
Faça login no console DLF-Legacy. Na página Metadata Management, clique em Create Database. Este tutorial utiliza um banco de dados chamado
mydatabase. Para detalhes, consulte Bancos de dados, tabelas e funções.-
Na página Metadata Discovery, crie um job para importar os dados de teste do OSS. Para detalhes, consulte Descoberta de metadados. Após a conclusão do job, as tabelas importadas aparecerão na aba Table da página Metadata.

Etapa 3: Comprar uma instância do Hologres
Compre uma instância do Hologres seguindo as instruções em Comprar uma instância do Hologres.
Configure o Hologres para aceleração de data lake
Etapa 1: Ativar o recurso de aceleração de data lake
Acesse a página de instâncias do Hologres. Na coluna Actions da sua instância, clique em Lake Acceleration e confirme. A instância reiniciará após a ativação deste recurso.
Etapa 2: Criar um banco de dados
Faça login na instância do Hologres e crie um banco de dados. Para detalhes, consulte Conectar e consultar com o HoloWeb.
Etapa 3: Criar as extensões necessárias
O Hologres V2.1 e versões posteriores criam a extensão dlf_fdw por padrão. Verifique a versão da sua instância na página Instance Details na lista de instâncias do Hologres . Se sua versão for V2.1 ou superior, pule esta etapa.
Execute as seguintes instruções como superusuário no Editor SQL no HoloWeb. Essas operações aplicam-se a todo o banco de dados e precisam ser executadas apenas uma vez por banco. Para informações sobre como conceder permissões de superusuário, consulte Conceder permissões a uma conta de serviço.
-
Crie a extensão
plpython3u:CREATE EXTENSION IF NOT EXISTS plpython3u; -
Ative a extensão
dlf_fdw:CREATE EXTENSION IF NOT EXISTS dlf_fdw;
Etapa 4: Criar um servidor externo
Execute a seguinte instrução para criar um servidor externo chamado dlf_server. Isso configura as informações de endpoint que o Hologres usa para comunicar-se com o DLF e o OSS. Para detalhes dos parâmetros, consulte Criar um servidor externo.
-- China (Shanghai) region example
CREATE SERVER IF NOT EXISTS dlf_server FOREIGN DATA WRAPPER dlf_fdw OPTIONS (
dlf_region 'cn-shanghai',
dlf_endpoint 'dlf-share.cn-shanghai.aliyuncs.com',
oss_endpoint 'oss-cn-shanghai-internal.aliyuncs.com'
);
Consultar dados do OSS usando tabelas externas
Uma tabela externa do Hologres mapeia dados armazenados no OSS — os dados permanecem no OSS e não consomem armazenamento do Hologres. Use tabelas externas para consultas ad hoc ou quando quiser evitar a duplicação de dados.
Dica: Mantenha grandes tabelas de fatos no OSS e consulte-as como tabelas externas. Importe tabelas de dimensões frequentemente associadas para o Hologres como tabelas internas para obter o melhor equilíbrio entre custo e desempenho.
Etapa 1: Mapear tabelas do OSS para tabelas externas do Hologres
-- Replace "mydatabase" with the name of your database in DLF.
IMPORT FOREIGN SCHEMA mydatabase LIMIT TO
(
nation_orc,
supplier_orc,
partsupp_orc
)
FROM SERVER dlf_server INTO public OPTIONS (if_table_exist 'update');
Etapa 2: Executar uma consulta
Após criar as tabelas externas, consulte-as diretamente. O exemplo TPC-H Q11 a seguir associa três tabelas no data lake do OSS:
-- TPC-H Q11: identify the most important subset of suppliers' parts
SELECT
ps_partkey,
SUM(ps_supplycost * ps_availqty) AS value
FROM
partsupp_orc,
supplier_orc,
nation_orc
WHERE
ps_suppkey = s_suppkey
AND s_nationkey = n_nationkey
AND RTRIM(n_name) = 'EGYPT'
GROUP BY ps_partkey
HAVING
SUM(ps_supplycost * ps_availqty) > (
SELECT SUM(ps_supplycost * ps_availqty) * 0.000001
FROM partsupp_orc, supplier_orc, nation_orc
WHERE ps_suppkey = s_suppkey
AND s_nationkey = n_nationkey
AND RTRIM(n_name) = 'EGYPT'
)
ORDER BY value DESC;
A consulta retorna linhas classificadas pelo valor das peças. Os resultados refletem dados lidos em tempo real do OSS.
(Opcional) Consultar dados do OSS usando tabelas internas
Importe dados do OSS para tabelas internas do Hologres quando precisar de consultas repetidas mais rápidas ou análises complexas. Tabelas internas armazenam dados dentro do Hologres para otimizar o desempenho da consulta, mas taxas de armazenamento são aplicáveis. Consulte Faturamento.
Etapa 1: Criar tabelas internas
-- Create the nation table
DROP TABLE IF EXISTS NATION;
BEGIN;
CREATE TABLE NATION (
N_NATIONKEY int NOT NULL PRIMARY KEY,
N_NAME text NOT NULL,
N_REGIONKEY int NOT NULL,
N_COMMENT text NOT NULL
);
CALL set_table_property('NATION', 'distribution_key', 'N_NATIONKEY');
CALL set_table_property('NATION', 'bitmap_columns', '');
CALL set_table_property('NATION', 'dictionary_encoding_columns', '');
COMMIT;
-- Create the supplier table
DROP TABLE IF EXISTS SUPPLIER;
BEGIN;
CREATE TABLE SUPPLIER (
S_SUPPKEY int NOT NULL PRIMARY KEY,
S_NAME text NOT NULL,
S_ADDRESS text NOT NULL,
S_NATIONKEY int NOT NULL,
S_PHONE text NOT NULL,
S_ACCTBAL DECIMAL(15, 2) NOT NULL,
S_COMMENT text NOT NULL
);
CALL set_table_property('SUPPLIER', 'distribution_key', 'S_SUPPKEY');
CALL set_table_property('SUPPLIER', 'bitmap_columns', 'S_NATIONKEY');
CALL set_table_property('SUPPLIER', 'dictionary_encoding_columns', '');
COMMIT;
-- Create the partsupp table
DROP TABLE IF EXISTS PARTSUPP;
BEGIN;
CREATE TABLE PARTSUPP (
PS_PARTKEY int NOT NULL,
PS_SUPPKEY int NOT NULL,
PS_AVAILQTY int NOT NULL,
PS_SUPPLYCOST DECIMAL(15, 2) NOT NULL,
PS_COMMENT text NOT NULL,
PRIMARY KEY (PS_PARTKEY, PS_SUPPKEY)
);
CALL set_table_property('PARTSUPP', 'distribution_key', 'PS_PARTKEY');
CALL set_table_property('PARTSUPP', 'bitmap_columns', 'ps_availqty');
CALL set_table_property('PARTSUPP', 'dictionary_encoding_columns', '');
COMMIT;
Etapa 2: Importar dados de tabelas externas
INSERT INTO nation SELECT * FROM nation_orc;
INSERT INTO supplier SELECT * FROM supplier_orc;
INSERT INTO partsupp SELECT * FROM partsupp_orc;
Etapa 3: Executar uma consulta
-- TPC-H Q11 against internal tables
SELECT
ps_partkey,
SUM(ps_supplycost * ps_availqty) AS value
FROM
partsupp,
supplier,
nation
WHERE
ps_suppkey = s_suppkey
AND s_nationkey = n_nationkey
AND RTRIM(n_name) = 'EGYPT'
GROUP BY ps_partkey
HAVING
SUM(ps_supplycost * ps_availqty) > (
SELECT SUM(ps_supplycost * ps_availqty) * 0.000001
FROM partsupp, supplier, nation
WHERE ps_suppkey = s_suppkey
AND s_nationkey = n_nationkey
AND RTRIM(n_name) = 'EGYPT'
)
ORDER BY value DESC;
Consultas em tabelas internas retornam os mesmos resultados que a consulta em tabela externa, mas com velocidade significativamente maior para cargas de trabalho repetidas ou complexas.
Limpeza
Para evitar cobranças contínuas de armazenamento após concluir este tutorial, exclua os recursos criados:
-
Remova as tabelas internas no Hologres:
DROP TABLE IF EXISTS NATION; DROP TABLE IF EXISTS SUPPLIER; DROP TABLE IF EXISTS PARTSUPP; -
Remova as tabelas externas:
DROP FOREIGN TABLE IF EXISTS nation_orc; DROP FOREIGN TABLE IF EXISTS supplier_orc; DROP FOREIGN TABLE IF EXISTS partsupp_orc; -
Remova o servidor externo:
DROP SERVER IF EXISTS dlf_server; Exclua os dados de teste do seu bucket no OSS ou exclua o próprio bucket usando o console do OSS.
Solução de problemas
Erro: ERROR: babysitter not ready,req:name:"HiveAccess"
O recurso de aceleração de data lake não está ativado na sua instância. Acesse a página de instâncias do Hologres, clique em Lake Acceleration na coluna Actions e confirme para ativá-lo.
Próximos passos
Este tutorial abordou um fluxo básico de ponta a ponta usando dados de teste. Para uma descrição completa do recurso de aceleração de data lake, incluindo todos os parâmetros e configurações suportados, consulte Aceleração de data lake do OSS usando DLF.