Este artigo apresenta o suporte do mecanismo de formato tabular aberto Databend, incluindo vantagens e desvantagens, métodos de uso e comparação com a solução Catalog. Além disso, está incluído um workshop simples para apresentar como usar o Databend Cloud para analisar a tabela Delta localizada no armazenamento de objetos.
A Databend lançou recentemente dois mecanismos de tabela, Apache Iceberg e Delta Table, para fornecer suporte aos dois formatos de tabela aberta mais populares para atender às necessidades de análise avançada de soluções modernas de data lake baseadas em diferentes pilhas de tecnologia.
Usando uma solução completa baseada em Databend/Databend Cloud, você pode obter insights sobre dados tabulares abertos e simplificar a arquitetura de implantação e o processo de análise sem ativar serviços Spark/Databricks adicionais. Além disso, usando a solução de acesso a dados do Databend/Databend Cloud construída no Apache OpenDAL™, você pode acessar facilmente dezenas de serviços de armazenamento, incluindo armazenamento de objetos, HDFS e até mesmo IPFS, e pode ser facilmente integrado às pilhas de tecnologia existentes.
Vantagem
-
Ao usar o mecanismo de formato de tabela aberto, você só precisa especificar o tipo (
Delta
ouIceberg
) do mecanismo de tabela e o local onde o arquivo de dados está armazenado, e você pode acessar diretamente a tabela correspondente e usar o Databend para consultar. -
Usando o mecanismo de formato tabular aberto do Databend, você pode lidar facilmente com cenários onde você mistura diferentes fontes de dados e dados em diferentes formatos tabulares:
- No mesmo objeto de banco de dados, consulte e analise tabelas de dados resumidas em diferentes formatos.
- Com a rica integração de back-end de armazenamento do Databend, você pode lidar com as necessidades de acesso a dados em diferentes back-ends de armazenamento.
insuficiente
- Atualmente, os motores Apache Iceberg e Delta Lake suportam apenas operações somente leitura, ou seja, eles só podem consultar dados, mas não podem gravar dados na tabela.
- O esquema da tabela é determinado quando a tabela é criada. Se o esquema da tabela original for modificado, para garantir a consistência e sincronização dos dados, a tabela precisa ser recriada no Databend.
Instruções
-- Set up connection
CREATE [ OR REPLACE ] CONNECTION [ IF NOT EXISTS ] <connection_name>
STORAGE_TYPE = '<type>'
[ <storage_params> ]
-- Create table with Open Table Format engine
CREATE TABLE <table_name>
ENGINE = [Delta | Iceberg]
LOCATION = '<location_to_table>'
CONNECTION_NAME = '<connection_name>'
Dica: Use no Databend
CONNECTION
para gerenciar os detalhes necessários para interagir com serviços de armazenamento externos, como credenciais de acesso, URLs de endpoint e tipos de armazenamento. Ao especificarCONNECTION_NAME
, você pode reutilizá-lo na criação de recursosCONNECTION
, simplificando o gerenciamento e o uso de configurações de armazenamento.
Comparação com solução de catálogo
O Databend já forneceu suporte para Iceberg e Hive por meio do Catalog. Em comparação com os mecanismos de tabela, o Catalog é mais adequado para a ecologia relacionada ao acoplamento completo e à montagem de vários bancos de dados e tabelas ao mesmo tempo.
O novo mecanismo de formato de tabela aberto é mais flexível em termos de experiência, suportando a agregação e mistura de dados de diferentes fontes de dados e diferentes formatos de tabela no mesmo banco de dados e conduzindo análises e insights eficazes.
Workshop: Use Databend Cloud para analisar dados em Delta Table
Este exemplo mostrará como usar o Databend Cloud para carregar e analisar uma tabela Delta localizada no armazenamento de objetos.
Usaremos o conjunto clássico de dados de características do corpo do pinguim (pinguins), o converteremos em uma Tabela Delta e o colocaremos em um armazenamento de objetos compatível com S3. Este conjunto de dados contém um total de 8 variáveis, incluindo 7 variáveis de características e 1 variável categórica, com um total de 344 amostras.
- As variáveis categóricas são espécies (espécies) de pinguins, que pertencem a três subgêneros do gênero Pinguim de cauda dura , a saber, Adélie, Chinstrap e Gentoo.
- As seis características dos três pinguins incluídos são a ilha (ilha), comprimento do bico (bill_length_mm), profundidade do bico (bill_profundidade_mm), comprimento da nadadeira (flipper_length_mm), peso corporal (body_mass_g) e sexo (sexo).
Se você ainda não possui uma conta Databend Cloud, visite https://app.databend.cn/register para se registrar e obter cota gratuita. Ou você pode consultar https://docs.databend.com/guides/deploy/ para implantar o Databend localmente.
Este artigo também aborda o uso de armazenamento de objetos, e você também pode tentar criar um Bucket usando Cloudflare R2 com cota gratuita.
Gravar dados no armazenamento de objetos
Precisamos instalar o pacote Python correspondente, seaborn
que é responsável por fornecer dados brutos, deltalake
converter os dados em uma Tabela Delta e gravá-los no S3:
pip install deltalake seaborn
Em seguida, edite o código abaixo, configure as credenciais de acesso correspondentes e salve-o como writedata.py
:
import seaborn as sns
from deltalake.writer import write_deltalake
ACCESS_KEY_ID = '<your-key-id>'
SECRET_ACCESS_KEY = '<your-access-key>'
ENDPOINT_URL = '<your-endpoint-url>'
storage_options = {
"AWS_ACCESS_KEY_ID": ACCESS_KEY_ID,
"AWS_SECRET_ACCESS_KEY": SECRET_ACCESS_KEY,
"AWS_ENDPOINT_URL": ENDPOINT_URL,
"AWS_S3_ALLOW_UNSAFE_RENAME": 'true',
}
penguins = sns.load_dataset('penguins')
write_deltalake("s3://penguins/", penguins, storage_options=storage_options)
Execute o script Python acima para gravar dados no armazenamento de objetos:
python writedata.py
Acessar dados usando o mecanismo de tabela Delta
Crie credenciais de acesso correspondentes no Databend:
--Set up connection
CREATE CONNECTION my_r2_conn
STORAGE_TYPE = 's3'
SECRET_ACCESS_KEY = '<your-access-key>'
ACCESS_KEY_ID = '<your-key-id>'
ENDPOINT_URL = '<your-endpoint-url>';
Crie uma tabela de dados com tecnologia do mecanismo de tabela Delta:
-- Create table with Open Table Format engine
CREATE TABLE penguins
ENGINE = Delta
LOCATION = 's3://penguins/'
CONNECTION_NAME = 'my_r2_conn';
Use SQL para consultar e analisar dados em tabelas
Verifique a acessibilidade dos dados
Primeiro, vamos gerar as espécies e ilhas dos 5 pinguins para verificar se os dados da Tabela Delta podem ser acessados corretamente.
SELECT species, island FROM penguins LIMIT 5;
Filtragem de dados
Em seguida, você pode realizar algumas operações básicas de filtragem de dados, como descobrir a qual subgênero pinguins machos com comprimento de nadadeira superior a 210 mm podem pertencer.
SELECT DISTINCT species
FROM penguins
WHERE sex = 'Male'
AND flipper_length_mm > 210;
análise de dados
Da mesma forma, poderíamos tentar calcular a proporção entre o comprimento e a profundidade do bico de cada pinguim e produzir os cinco maiores.
SELECT bill_length_mm / bill_depth_mm AS length_to_depth
FROM penguins
ORDER BY length_to_depth DESC
LIMIT 5;
Caso de fonte de dados mista: registro de observação de pinguins
Agora entraremos em uma parte interessante: suponha que encontramos um registro de observação de uma estação de pesquisa científica, vamos tentar inserir esses dados no mesmo banco de dados e tentar realizar uma análise simples dos dados: uma ave de um gênero específico Qual é o probabilidade de um pinguim ser marcado por um cientista.
Criar tabela de registro de observação
Use o mecanismo FUSE padrão para criar penguin_observations
uma tabela, incluindo ID, data, nome, espécie e gênero de pinguim, comentários e outras informações.
CREATE TABLE penguin_observations (
observation_id INT,
observation_date DATE,
observer_name VARCHAR,
penguin_species VARCHAR,
penguin_sex VARCHAR,
notes TEXT,
);
Insira o registro de observação
Vamos tentar inserir todos os 10 logs manualmente. Sabe-se que os pinguins que aparecem nos registros de log são diferentes uns dos outros.
INSERT INTO penguin_observations (observation_id, observation_date, observer_name, penguin_species, penguin_sex, notes)
VALUES
(1, '2023-01-01', 'Dr. Kowalski', 'Adelie', 'Male', 'Noticed aggressive behavior towards peers.'),
(2, '2023-01-02', 'Dr. Smith', 'Chinstrap', 'Female', 'Sighted building a nest.'),
(3, '2023-01-03', 'Dr. Kowalski', 'Gentoo', 'Female', 'Observed feeding offspring.'),
(4, '2023-01-04', 'Dr. Smith', 'Adelie', 'Male', 'Found resting by the shoreline.'),
(5, '2023-01-05', 'Dr. Kowalski', 'Adelie', 'Female', 'Engaged in mating rituals.'),
(6, '2023-01-06', 'Dr. Kowalski', 'Gentoo', 'Male', 'Spotted swimming in the open water.'),
(7, '2023-01-07', 'Dr. Smith', 'Chinstrap', 'Male', 'Appeared to be molting.'),
(8, '2023-01-08', 'Dr. Smith', 'Gentoo', 'Female', 'Seen with a potential mate.'),
(9, '2023-01-09', 'Dr. Kowalski', 'Adelie', 'Female', 'Observed preening feathers.'),
(10, '2023-01-10', 'Dr. Kowalski', 'Adelie', 'Male', 'Identified with a tagged flipper.');
Calcular a probabilidade de marcação
Agora vamos calcular a probabilidade de um certo pinguim Adelie macho ser observado pelo Dr. Kowalski entre todos os pinguins. Primeiro precisamos contar o número de pinguins Adélia machos observados pelo Dr. Kowalski, depois contar o número de todos os pinguins Adélia machos registrados e, finalmente, dividir para obter o resultado.
SELECT
(SELECT COUNT(*)
FROM penguin_observations
WHERE observer_name = 'Dr. Kowalski'
AND species = 'Adelie'
AND sex = 'Male')::FLOAT /
(SELECT COUNT(*)
FROM penguins
WHERE species = 'Adelie'
AND sex = 'Male')::FLOAT AS observation_probability;
Resumir
Ao combinar diferentes mecanismos de tabela para consulta, o Databend/Databend Cloud pode oferecer suporte à mistura de tabelas em diferentes formatos no mesmo banco de dados para análise e consulta. Este artigo fornece apenas um workshop básico para que todos possam experimentar as funções e o uso. Você pode expandir com base neste caso e explorar mais cenários de combinação de Iceberg e Delta Table para análise de dados, bem como mais aplicações potenciais no mundo real.
Leitura recomendada
- Documentos | Mecanismo de tabela Apache Iceberg
- Documentos | Mecanismo de tabela Delta Lake
- Documentos | Conexão