Uso do Auto Loader com o Unity Catalog
O Auto Loader pode ingerir com segurança dados de locais externos configurados com o Unity Catalog. Para saber mais sobre como conectar com segurança o armazenamento com o Unity Catalog, consulte Conectar ao armazenamento de objetos na nuvem usando o Unity Catalog. Auto Loader depende da transmissão estruturada para processamento incremental; para obter recomendações e limitações, consulte Uso do site Unity Catalog com transmissão estruturada.
No Databricks Runtime 11.3 LTS e versões superiores, você pode usar Auto Loader com os modos de acesso padrão ou dedicado (anteriormente conhecidos como modos de acesso compartilhado e de usuário único).
O modo de listagem de diretórios é suportado pelo site default. O modo de notificação de arquivo só é compatível com o site compute com modo de acesso dedicado.
Especifique os locais para o recurso Auto Loader no Unity Catalog .
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. Databricks recomenda sempre armazenar informações de ponto de verificação e evolução do esquema em locais de armazenamento gerenciados pelo Unity Catalog. Unity Catalog não permite aninhar arquivos de ponto de verificação ou inferência de esquema e evolução no diretório da tabela.
Ingerir dados do armazenamento cloud usando Unity Catalog
Os exemplos a seguir pressupõem que o usuário que executa o comando tenha permissões READ FILES no local externo, privilégios de proprietário nas tabelas de destino e as seguintes configurações e concessões.
Localização de armazenamento | Conceder |
|---|---|
|
|
|
|
Use Auto Loader para carregar em um Unity Catalog ger tabela
Os exemplos a seguir demonstram como usar Auto Loader para inserir dados em uma tabela de gerenciamento Unity Catalog .
- Python
- SQL
checkpoint_path = "gs://dev-bucket/_checkpoint/dev_table"
(spark.readStream
.format("cloudFiles")
.option("cloudFiles.format", "json")
.option("cloudFiles.schemaLocation", checkpoint_path)
.load("gs://autoloader-source/json-data")
.writeStream
.option("checkpointLocation", checkpoint_path)
.trigger(availableNow=True)
.toTable("dev_catalog.dev_database.dev_table"))
CREATE OR REFRESH STREAMING TABLE dev_catalog.dev_database.dev_table
AS SELECT * FROM STREAM read_files(
'gs://autoloader-source/json-data',
format => 'json'
);
Quando você usa read_files em uma instrução CREATE STREAMING TABLE dentro de um pipeline LakeFlow Spark Declarative, os locais de checkpoint e schema são gerenciados automaticamente.
A autenticação para GCS é gerenciada por meio do local externo Unity Catalog configurado para o caminho GCS . Você deve ter privilégios READ FILES no local externo. Consulte Conectar-se a um local externo do Google Cloud Storage (GCS).
Para usar o modo de notificação de arquivos para uma descoberta mais rápida de arquivos, forneça uma credencial de serviço ou as credenciais de uma conta do Google. See GCP.
Uso do Auto Loader para carregar em uma tabela externa do Unity Catalog
Para manter os dados em um local de armazenamento específico, use uma tabela externa do Unity Catalog em vez de uma tabela gerenciada. Por exemplo, use uma tabela externa para compartilhar dados com clientes que não são do Databricks ou para registrar dados existentes. Com tabelas externas, o caminho de armazenamento é definido. Consulte Trabalhar com tabelas externas.
Para usar o Auto Loader com uma tabela externa do Unity Catalog, primeiro registre a tabela com CREATE TABLE ... LOCATION, depois transmita para ela pelo nome. O local da tabela deve estar dentro de um local externo onde você tenha permissões de CREATE EXTERNAL TABLE. O local do checkpoint também deve estar em uma localização externa gerenciada pelo Unity Catalog. Use um caminho separado dos dados da tabela.
checkpoint_path = "gs://dev-bucket/_checkpoint/dev_table"
table_path = "gs://dev-bucket/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("gs://autoloader-source/json-data")
.writeStream
.option("checkpointLocation", checkpoint_path)
.trigger(availableNow=True)
.toTable("dev_catalog.dev_database.dev_table"))