Usando o Auto Loader com o Unity Catalog

O Auto Loader pode ingerir dados de locais externos configurados de forma segura com o Unity Catalog. Para saber mais sobre como conectar o armazenamento com segurança ao Unity Catalog, consulte Conectar-se ao armazenamento de objetos na nuvem usando o Unity Catalog. O Auto Loader depende do Structured Streaming para processamento incremental; para obter recomendações e limitações, consulte Usando o catálogo Unity com streaming estruturado.

Nota

Nos Databricks Runtime 11.3 LTS e versões superiores, pode usar o Auto Loader com modos de acesso normal ou dedicados, anteriormente conhecidos como modos de acesso partilhado e de utilizador único.

O modo de listagem de diretório é suportado por padrão.

Especificar localizações para recursos do Auto Loader para o Catálogo Unity

O modelo de segurança do Unity Catalog pressupõe que todos os locais de armazenamento referenciados em uma carga de trabalho serão gerenciados pelo Unity Catalog. O Databricks recomenda sempre armazenar informações de ponto de verificação e evolução do esquema em locais de armazenamento gerenciados pelo Unity Catalog. O Unity Catalog não permite inserir ficheiros de ponto de verificação ou de inferência e evolução de esquema no diretório da tabela.

Ingerir dados do armazenamento na cloud usando o Unity Catalog

Os exemplos seguintes assumem que o utilizador executante tem READ FILES permissões sobre a localização externa, privilégios de proprietário nas tabelas de destino e as seguintes configurações e concessões.

Nota

O Armazenamento Azure Data Lake é o único tipo de armazenamento do Azure suportado pelo Catálogo Unity.

Localização de armazenamento Subvenção
abfss://autoloader-source@<storage-account>.dfs.core.windows.net/json-data READ FILES
abfss://dev-bucket@<storage-account>.dfs.core.windows.net READ FILES, WRITE FILES, CREATE TABLE

Use o Auto Loader para carregar numa tabela gerida pelo Unity Catalog

Os exemplos seguintes demonstram como usar o Auto Loader para ingerir dados numa tabela gerida pelo Unity Catalog.

Python

checkpoint_path = "abfss://dev-bucket@<storage-account>.dfs.core.windows.net/_checkpoint/dev_table"

(spark.readStream
  .format("cloudFiles")
  .option("cloudFiles.format", "json")
  .option("cloudFiles.schemaLocation", checkpoint_path)
  .load("abfss://autoloader-source@<storage-account>.dfs.core.windows.net/json-data")
  .writeStream
  .option("checkpointLocation", checkpoint_path)
  .trigger(availableNow=True)
  .toTable("dev_catalog.dev_database.dev_table"))

SQL

CREATE OR REFRESH STREAMING TABLE dev_catalog.dev_database.dev_table
AS SELECT * FROM STREAM read_files(
  'abfss://autoloader-source@<storage-account>.dfs.core.windows.net/json-data',
  format => 'json'
);

Quando utiliza read_files numa instrução CREATE STREAMING TABLE no Lakeflow Spark Declarative Pipelines, as localizações do checkpoint e do esquema são geridas automaticamente.

Use o Auto Loader para carregar numa tabela externa do Unity Catalog

Para manter os dados num local de armazenamento específico, use uma tabela externa do Unity Catalog em vez de uma tabela gerida. Por exemplo, use uma tabela externa para partilhar dados com clientes que não sejam Databricks ou para registar dados existentes. Com tabelas externas, defines o caminho de armazenamento. Consulte Trabalhar com tabelas externas.

Para usar o Auto Loader com uma tabela externa do Unity Catalog, primeiro registe a tabela com CREATE TABLE ... LOCATION e, em seguida, faça streaming para essa tabela pelo nome. A localização da tabela tem de estar dentro de uma localização externa para a qual tenha CREATE EXTERNAL TABLE permissões. A localização do ponto de controlo deve também estar numa localização externa gerida pelo Unity Catalog. Use um caminho separado dos dados da tabela.

checkpoint_path = "abfss://dev-bucket@<storage-account>.dfs.core.windows.net/_checkpoint/dev_table"
table_path = "abfss://dev-bucket@<storage-account>.dfs.core.windows.net/external/dev_table"

# One-time: register the external table in UC.
spark.sql(f"""
  CREATE TABLE IF NOT EXISTS dev_catalog.dev_database.dev_table
  USING DELTA
  LOCATION '{table_path}'
""")

(spark.readStream
  .format("cloudFiles")
  .option("cloudFiles.format", "json")
  .option("cloudFiles.schemaLocation", checkpoint_path)
  .load("abfss://autoloader-source@<storage-account>.dfs.core.windows.net/json-data")
  .writeStream
  .option("checkpointLocation", checkpoint_path)
  .trigger(availableNow=True)
  .toTable("dev_catalog.dev_database.dev_table"))