Habilitar acesso a dados externos a tabelas de transmissão e views materializadas
Visualização
Esse recurso está em Prévia Pública.
Se você tiver ativado o acesso a dados externos ao Unity Catalog, então você poderá adicionar ainda acesso a dados externos aos seus datasets de pipeline. Isso permite que clientes externos do Delta e do Iceberg acessem seus datasets através do Unity Catalog e das APIs REST do catálogo Iceberg, sem exigir uma cópia completa dos dados.
O acesso a dados externos para datasets de pipeline funciona para Lakeflow Spark Declarative Pipelines.
Capacidades
A utilização de acesso a dados externos para datasets de pipeline expõe os mesmos dados disponíveis no Databricks, sem criar uma duplicata dos dados. Isto oferece as seguintes características para desempenho e funcionalidade:
- Nenhuma cópia de dados necessária: O acesso externo é ativado sem duplicar o dataset completo.
- Acesso externo via APIs: Leia views materializadas e tabelas de transmissão usando APIs do Delta Lake ou do Iceberg.
- Consistência de leitura após gravação: Leitores externos podem acessar dados atualizados após uma atualização no dataset, garantindo que não haja obsolescência. As atualizações estão disponíveis imediatamente após o refresh.
- Objeto de tabela única: datasets aparecem externamente como tabelas gerenciadas com o mesmo nome do dataset de origem nas APIs do Unity Catalog.
- Baixo custo: Como o dataset completo não é copiado, a sobrecarga para fornecer acesso externo é baixa.
Requisitos
Os requisitos para seus datasets são:
- O acesso externo deve ser habilitado no esquema: seu workspace deve estar inscrito na pré-visualização pública de Acesso Externo a Dados para Datasets de Pipeline , e deve ser habilitado para o esquema com seus datasets. Consulte Ativar acesso a dados externos ao Unity Catalog.
- Unity Catalog: As suas tabelas de transmissão e views materializadas devem estar usando o Unity Catalog.
- Versão do Databricks Runtime: Você deve usar o Databricks Runtime 17.3 e acima.
Os requisitos para os seus clientes são:
- Versão da API do Delta: O cliente deve oferecer suporte às APIs do Delta Lake 4.0.0 ou acima, incluindo vetores de exclusão, e deve usar as APIs de catálogo do Unity Catalog para acesso.
- Versão da API do Iceberg: Como alternativa, o cliente pode acessar usando APIs de catálogo do Iceberg que ofereçam suporte à especificação Iceberg v3.
- Privilégios do Unity Catalog: O principal que lê os datasets externamente deve ter o privilégio EXTERNAL USE SCHEMA no esquema e o privilégio
SELECTna tabela.
Caso o cliente não ofereça suporte a esses requisitos, também é possível usar o modo de compatibilidade, que oferece suporte a todos os clientes Delta e Iceberg, mas exige a criação de uma cópia completa do dataset.
Como habilitar o acesso a um dataset
Há três passos para habilitar o acesso externo para um dataset.
- Na sua definição de dataset, adicione o seguinte
TBLPROPERTIES. Isso é necessário apenas para leitores Iceberg v3. Se você tiver apenas leitores Delta, você pode pular este passo.
Propriedade | Uso |
|---|---|
| Mapeamento de coluna é necessário para Iceberg. |
| Habilitar o UniForm para o Iceberg. |
| Use Iceberg V3 para UniForm. |
| Alteração do feed de dados não é compatível com acesso externo, portanto, isso deve ser |
Por exemplo, é possível atualizar a definição de uma view materializada nos Pipelines declarativos do Lakeflow Spark adicionando o seguinte TBLPROPERTIES à sua query:
CREATE OR REFRESH MATERIALIZED VIEW view_name
TBLPROPERTIES(
...
'delta.columnMapping.mode' = 'name',
'delta.enableIcebergCompatV3' = 'true',
'delta.universalFormat.enabledFormats' = 'iceberg',
'delta.enableChangeDataFeed' = 'false')
...
Para ver as propriedades do seu dataset, você pode usar a DESCRIBE EXTENDED instrução SQL.
2. Aplicar as propriedades do Iceberg ao pipeline. Isso é necessário apenas para leitores Iceberg v3. Se você tiver apenas leitores Delta, você pode pular este passo.
- Pipelines Acionados : execute o pipeline uma vez.
- Pipelines contínuos : parar e reiniciar o pipeline.
- Na configuração do pipeline, defina
pipelines.externalMetadata.enabledcomotrue.
- Pipeline settings UI
- Pipeline configuration JSON
- Abrir pipeline e clique em **Configurações**.
- Em **Configuração**, adicione um par key-value: **key**,
pipelines.externalMetadata.enabledtrue**Valor**. - Clique em Salvar .
Na seção configuration do pipeline JSON, adicione:
{
"configuration": {
"pipelines.externalMetadata.enabled": "true"
}
}
Após salvar a configuração, execute ou reinicie o pipeline para aplicar as alterações:
- Pipelines Acionados : execute o pipeline uma vez.
- Pipelines contínuos : parar e reiniciar o pipeline.
Ler dados de clientes externos
As seções a seguir descrevem como ler seu dataset de diferentes clientes e ambientes.
Use a API REST do Unity com o Spark Delta Reader
Utilize a versão 4.0 ou posterior do Apache Spark™. Você pode fazer download de https://spark.apache.org/downloads.html.
- Com base no seu provedor de cloud, execute o seguinte comando para iniciar um shell do Spark SQL com Delta 4.0 e Unity Catalog.
- AWS
- Azure
- GCP
bin/spark-sql \
--packages org.apache.spark:spark-hadoop-cloud_2.13:4.0.0,io.unitycatalog:unitycatalog-spark_2.13:0.3.1 \
--conf spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension \
--conf spark.sql.catalog.spark_catalog=io.unitycatalog.spark.UCSingleCatalog \
--conf spark.hadoop.fs.s3.impl=org.apache.hadoop.fs.s3a.S3AFileSystem \
--conf spark.sql.catalog.<uc-catalog-name>=io.unitycatalog.spark.UCSingleCatalog \
--conf spark.sql.catalog.<uc-catalog-name>.uri=<workspace_url> \
--conf spark.sql.catalog.<uc-catalog-name>.token=<PAT> \
--conf spark.sql.defaultCatalog=<uc-catalog-name>
bin/spark-sql \
--packages org.apache.hadoop:hadoop-azure:3.3.6,io.unitycatalog:unitycatalog-spark_2.13:0.3.1 \
--conf spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension \
--conf spark.sql.catalog.spark_catalog=io.unitycatalog.spark.UCSingleCatalog \
--conf spark.sql.catalog.<uc-catalog-name>=io.unitycatalog.spark.UCSingleCatalog \
--conf spark.sql.catalog.<uc-catalog-name>.uri=<workspace_url> \
--conf spark.sql.catalog.<uc-catalog-name>.token=<PAT> \
--conf spark.sql.defaultCatalog=<uc-catalog-name>
bin/spark-sql \
--packages io.unitycatalog:unitycatalog-spark_2.13:0.3.1 \
--conf spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension \
--conf spark.sql.catalog.spark_catalog=io.unitycatalog.spark.UCSingleCatalog \
--conf spark.hadoop.fs.gs.impl=com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem \
--conf spark.hadoop.fs.AbstractFileSystem.gs.impl=com.google.cloud.hadoop.fs.gcs.GoogleHadoopFS \
--conf spark.sql.catalog.<uc-catalog-name>=io.unitycatalog.spark.UCSingleCatalog \
--conf spark.sql.catalog.<uc-catalog-name>.uri=<workspace_url> \
--conf spark.sql.catalog.<uc-catalog-name>.token=<PAT> \
--conf spark.sql.defaultCatalog=<uc-catalog-name>
-
Do shell SQL, agora se pode acessar seu dataset com o Spark SQL. Por exemplo:
Shellspark-sql ()> SELECT * FROM <uc-catalog>.<uc-schema>.<uc-table-name>;
Use o leitor Snowflake Iceberg
Dentro do Snowflake, é possível usar o leitor Iceberg. Isso requer suporte ao Iceberg v3, que está atualmente em Private Preview no Snowflake.
-
Configurar o catálogo Iceberg REST no Apache Spark.
Shellbin/spark-shell \
--packages org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.8.0,org.apache.iceberg:iceberg-aws-bundle:1.8.0 \
--conf "spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions" \
--conf spark.sql.catalog.<uc-catalog-name>=org.apache.iceberg.spark.SparkCatalog \
--conf spark.sql.catalog.<uc-catalog-name>.type=rest \
--conf spark.sql.catalog.<uc-catalog-name>.uri=<workspace-url>/api/2.1/unity-catalog/iceberg-rest \
--conf spark.sql.catalog.<uc-catalog-name>.token=<PAT> \
--conf spark.sql.catalog.<uc-catalog-name>.warehouse=<uc-catalog-name> -
Configurar o catálogo REST do Iceberg no Snowflake.
SQLCREATE OR REPLACE CATALOG INTEGRATION my_uc_int
CATALOG_SOURCE = ICEBERG_REST
TABLE_FORMAT = ICEBERG
CATALOG_NAMESPACE = '<uc-schema-name>'
REST_CONFIG = (
CATALOG_URI = '<workspace-url>/api/2.1/unity-catalog/iceberg-rest'
CATALOG_NAME = '<uc-catalog-name>'
ACCESS_DELEGATION_MODE = VENDED_CREDENTIALS
)
REST_AUTHENTICATION = (
TYPE = BEARER
BEARER_TOKEN = '<PAT>'
)
ENABLED = TRUE;
CREATE OR REPLACE ICEBERG TABLE my_table
CATALOG = 'my_uc_int'
CATALOG_TABLE_NAME = '<uc-table-name>'; -
Acesse seu dataset a partir do Spark SQL.
Shellspark-sql ()> SELECT * FROM <uc-catalog>.<uc-schema>.<uc-table-name>;
Use o catálogo REST Iceberg com o leitor Iceberg Spark
Utilize a versão 4.0 ou posterior do Apache Spark™. Você pode fazer download de https://spark.apache.org/downloads.html.
-
Na AWS, execute o seguinte comando para iniciar um shell do Spark SQL com Iceberg v3.
Shellbin/spark-sql \
--packages org.apache.iceberg:iceberg-spark-runtime-4.0_2.13:1.10.0,org.apache.iceberg:iceberg-aws-bundle:1.10.0 \
--conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions \
--conf spark.sql.catalog.<uc-catalog-name>=org.apache.iceberg.spark.SparkCatalog \
--conf spark.sql.catalog.<uc-catalog-name>.io-impl=org.apache.iceberg.aws.s3.S3FileIO \
--conf spark.sql.catalog.<uc-catalog-name>.type=rest \
--conf spark.sql.catalog.<uc-catalog-name>.uri=<workspace_url>/api/2.1/unity-catalog/iceberg-rest \
--conf spark.sql.catalog.<uc-catalog-name>.token='<PAT>' \
--conf spark.sql.catalog.<uc-catalog-name>.warehouse=<uc-catalog-name> \
--conf spark.sql.iceberg.vectorization.enabled=false -
Acesse seu dataset a partir do Spark SQL.
Shellspark-sql ()> SELECT * FROM <uc-catalog>.<uc-schema>.<uc-table-name>;
Migrar do modo de compatibilidade
Se você está atualmente compartilhando um dataset usando o modo de compatibilidade, você pode migrar para usar o acesso a dados externos.
- Ative este recurso seguindo os passos em Como Habilitar o Acesso para um Dataset.
- Desative o modo de compatibilidade. Consulte Desativar Compatibility Mode
Limitações
As seguintes são as limitações conhecidas do acesso a dados externos para tabelas de transmissão e views materializadas.
- Gravações Externas: Gravações externas em datasets de pipeline não são suportadas.
- Acesso baseado em caminho: Leitores externos que exigem acesso baseado em caminho (leitura diretamente por um local de armazenamento em vez da interface da API do UC) não são suportados. Para oferecer suporte ao acesso baseado em caminho, pode-se utilizar o modo de compatibilidade, que oferece suporte ao acesso baseado em caminho, mas exige uma cópia completa do dataset.
- Recursos de segurança: Não há suporte para segurança em nível de linha ou mascaramento em nível de coluna a partir de leituras externas.
- Viagem do Tempo ou CDF: O suporte para viagem do tempo ou alteração do feed de dados (CDF) por meio deste recurso não é compatível. CDF deve ser desativado quando UniForm Iceberg está ativado.
- **Commits de Catálogo (beta):** Commits de Catálogo não são compatíveis com acesso a dados externos. Para utilizar o acesso a dados externos em uma tabela de transmissão, é necessário desabilitar primeiro os commits de catálogo. Commits do catálogo não estão disponíveis para as views materializadas.
- Pipelines de ingestão: Tabelas de transmissão criadas com o LakeFlow Connect não oferecem suporte à habilitação de propriedades de tabela Iceberg e estão disponíveis apenas com leitores Delta.
- Fabric: A leitura no Microsoft Fabric não tem suporte.
- Leitor Snowflake Iceberg: Você deve estar usando o leitor Iceberg v3 no Snowflake (Prévia Privada) para ler datasets de pipeline.
- MVs e STs Autônomos: Este recurso é compatível apenas com visualizações materializadas e tabelas de transmissão gerenciadas por um pipeline. Não há suporte para visualizações materializadas autônomas e tabelas de transmissão. Entre em contato com a equipe de account da Databricks se precisar de acesso externo para views materializadas autônomas e tabelas de transmissão.