Voltar ao início

Catálogo Iceberg REST · DuckDB · Polars

API

English version

Conecte o lake do dartic às suas ferramentas. O catálogo em https://dartic.io/catalog fala o protocolo Apache Iceberg REST (somente leitura) e lista as mesmas tabelas do console web. Os dados das tabelas são lidos direto do bucket público; o catálogo exige um token de acesso pessoal.

Tokens de acesso

Entre, abra a página API no console e crie um token. Ele começa com dpat_ e aparece uma única vez; guarde-o como uma senha (por exemplo em DARTIC_TOKEN). Você pode ter até 10 tokens, escolher a validade e revogar qualquer um a qualquer momento.

Criar um token

HTTP

Toda requisição leva Authorization: Bearer <token>.

export DARTIC_TOKEN=dpat_...

# Namespaces
curl -H "Authorization: Bearer $DARTIC_TOKEN" https://dartic.io/catalog/v1/namespaces

# Tables in a namespace
curl -H "Authorization: Bearer $DARTIC_TOKEN" https://dartic.io/catalog/v1/namespaces/equities/tables

# Current Iceberg metadata of one table
curl -H "Authorization: Bearer $DARTIC_TOKEN" https://dartic.io/catalog/v1/namespaces/equities/tables/raw_cvm_cgvn_geral

DuckDB

CLI ou Python. O ATTACH expõe cada tabela como lake.<namespace>.<tabela>, os mesmos nomes do editor web.

INSTALL iceberg; LOAD iceberg; INSTALL httpfs; LOAD httpfs;

-- Data files are public: an S3 secret without keys, pointed at the lake domain.
CREATE SECRET dartic_data (TYPE S3, KEY_ID '', SECRET '', REGION 'auto',
  ENDPOINT 'data.dartic.io', URL_STYLE 'vhost', USE_SSL true);

-- Your personal access token for the catalog.
CREATE SECRET dartic (TYPE iceberg, TOKEN 'dpat_...');

ATTACH 'dartic' AS lake (TYPE iceberg, ENDPOINT 'https://dartic.io/catalog',
  SECRET dartic, ACCESS_DELEGATION_MODE 'none');

SHOW ALL TABLES;
SELECT * FROM lake.equities.raw_cvm_cgvn_geral LIMIT 10;

Polars

Via PyIceberg. scan_iceberg é lazy: filtros e projeções vão para a leitura.

# pip install polars 'pyiceberg[pyarrow]'
import os

import polars as pl
from pyiceberg.catalog.rest import RestCatalog

catalog = RestCatalog(
    "dartic",
    uri="https://dartic.io/catalog",
    token=os.environ["DARTIC_TOKEN"],
    **{
        "s3.endpoint": "https://data.dartic.io",
        "s3.force-virtual-addressing": "true",
        "s3.anonymous": "true",
        "s3.region": "auto",
    },
)

print(catalog.list_tables("equities"))
df = pl.scan_iceberg(catalog.load_table("equities.raw_cvm_cgvn_geral")).head(10).collect()
print(df)

Sem token

O lake é de dados abertos. A lista de tabelas e seus arquivos de metadados atuais é publicada em https://hyoko-raw.data.dartic.io/dartic/manifest.json e qualquer uma pode ser lida com iceberg_scan. O token acrescenta descoberta e ATTACH.

-- No token: read one table straight from its metadata file listed in manifest.json.
SELECT count(*) FROM iceberg_scan(
  's3://hyoko-raw/__r2_data_catalog/.../metadata/00013-....gz.metadata.json',
  metadata_compression_codec => 'gzip');

Limites

120 requisições ao catálogo por minuto por token (um ATTACH custa cerca de dez). O catálogo é atualizado junto com o lake, uma vez por semana. Escritas recebem 405.