Använda Auto Loader med Unity Catalog

Automatisk inläsare kan på ett säkert sätt mata in data från externa platser som konfigurerats med Unity Catalog. Mer information om hur du ansluter lagring på ett säkert sätt med Unity Catalog finns i Ansluta till molnobjektlagring med Unity Catalog. Automatisk inläsare förlitar sig på strukturerad direktuppspelning för inkrementell bearbetning. Rekommendationer och begränsningar finns i Använda Unity Catalog med strukturerad direktuppspelning.

Kommentar

I Databricks Runtime 11.3 LTS och senare kan du använda Auto Loader med antingen standard- eller dedikerade åtkomstlägen (tidigare delade och enanvändares åtkomstlägen).

Kataloglistningsläge stöds som standard.

Ange platser för Auto Loader-resurser i Unity Catalog

Säkerhetsmodellen för Unity Catalog förutsätter att alla lagringsplatser som refereras i en arbetsbelastning hanteras av Unity Catalog. Databricks rekommenderar att du alltid lagrar information om kontrollpunkter och schemautveckling på lagringsplatser som hanteras av Unity Catalog. Med Unity Catalog kan du inte kapsla kontrollpunkter eller schemainferens- och evolutionsfiler under tabellkatalogen.

Mata in data från molnlagring med hjälp av Unity Catalog

I följande exempel förutsätts att den körande användaren har READ FILES behörigheter för den externa platsen, ägarbehörigheter för måltabellerna och följande konfigurationer och tilldelningar.

Kommentar

Azure Data Lake Storage är den enda Azure-lagringstypen som stöds av Unity Catalog.

Lagringsplats Bevilja
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 FILESCREATE TABLE

Använd Auto Loader för att läsa in till en hanterad Unity Catalog-tabell

Följande exempel visar hur du använder automatisk inläsning för att mata in data till en hanterad Unity Catalog-tabell.

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'
);

När du använder read_files i en CREATE STREAMING TABLE instruktion i Lakeflow-pipelines hanteras kontrollpunkter och schemaplatser automatiskt.

Använd Auto Loader för att läsa in i en extern tabell i Unity Catalog

Om du vill behålla data på en specifik lagringsplats använder du en extern Unity Catalog-tabell i stället för en hanterad tabell. Använd till exempel en extern tabell för att dela data med icke-Databricks-klienter eller för att registrera befintliga data. Med externa tabeller anger du lagringssökvägen. Se Arbeta med externa tabeller.

Om du vill använda Auto Loader med en extern Unity Catalog-tabell registrerar du först tabellen med CREATE TABLE ... LOCATIONoch strömmar sedan till den med namn. Tabellplatsen måste finnas på en extern plats där du har CREATE EXTERNAL TABLE behörighet. Platsen för kontrollpunkten måste också finnas på en extern plats som hanteras av Unity Catalog. Använd en separat sökväg från tabelldata.

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"))