Gegevens laden met behulp van COPY INTO via Unity Catalog-volumes of externe locaties

In dit artikel wordt beschreven hoe u de COPY INTO opdracht gebruikt om gegevens uit een Azure Data Lake Storage-container (ADLS) in uw Azure-account te laden in een tabel in Databricks SQL.

In de stappen in dit artikel wordt ervan uitgegaan dat uw beheerder een Unity Catalog-volume of externe locatie heeft geconfigureerd, zodat u toegang hebt tot uw bronbestanden in ADLS. Als uw beheerder een rekenresource heeft geconfigureerd voor het gebruik van een service-principal, raadpleeg dan in plaats daarvan Gegevens laden met een service-principal COPY INTO of Zelfstudie: COPY INTO met Spark SQL. Als uw beheerder u tijdelijke referenties (een Blob SAS-token) heeft gegeven, volgt u in plaats daarvan de stappen onder Gegevens laden met tijdelijke referenties COPY INTO.

Databricks raadt het gebruik van volumes aan om toegang te krijgen tot bestanden in cloudopslag als onderdeel van het opnameproces met behulp van COPY INTO. Zie best practices voor Unity Catalog voor meer informatie over aanbevelingen voor het gebruik van volumes en externe locaties.

Voordat u begint

Voordat u COPY INTO gegevens laadt vanaf een Unity Catalog-volume of vanuit een opslagpad voor cloudobjecten dat is gedefinieerd als een externe locatie voor Unity Catalog, moet u het volgende hebben:

  • De READ VOLUME bevoegdheid op een volume of de READ FILES bevoegdheid op een externe locatie. Zie Wat zijn Unity Catalog-volumes? voor meer informatie over het maken van volumes. Zie Overzicht van externe locaties voor meer informatie over het maken van externe locaties.

  • Het pad naar de brongegevens in de vorm van een opslag-URL voor cloudobjecten of een volumepad.

    Voorbeeld van opslag-URL voor cloudobjecten: abfss://container@storageAccount.dfs.core.windows.net/raw-data/json.

    Voorbeeld van volumepad: /Volumes/quickstart_catalog/quickstart_schema/quickstart_volume/raw_data/json.

  • De USE SCHEMA bevoegdheid voor het schema dat de doeltabel bevat.

  • Het USE CATALOG-privilege in de bovenliggende catalogus.

Zie de naslaginformatie over Unity Catalog-bevoegdheden voor meer informatie over Unity Catalog-bevoegdheden.

Gegevens laden van een volume

Als u gegevens van een Unity Catalog-volume wilt laden, moet u over de READ VOLUME bevoegdheid beschikken. Volumebevoegdheden zijn van toepassing op alle geneste mappen onder het opgegeven volume.

Als u bijvoorbeeld toegang hebt tot een volume met het pad /Volumes/quickstart_catalog/quickstart_schema/quickstart_volume/, zijn de volgende opdrachten geldig:

COPY INTO landing_table
FROM '/Volumes/quickstart_catalog/quickstart_schema/quickstart_volume/raw_data'
FILEFORMAT = PARQUET;

COPY INTO json_table
FROM '/Volumes/quickstart_catalog/quickstart_schema/quickstart_volume/raw_data/json'
FILEFORMAT = JSON;

Het dbfs: schemavoorvoegsel wordt ook ondersteund met volumepaden (bijvoorbeeld dbfs:/Volumes/...), maar Databricks raadt aan de /Volumes/ padindeling te gebruiken die hierboven wordt weergegeven.

Gegevens laden met behulp van een externe locatie

Note

Databricks raadt het gebruik van volumes aan om toegang te krijgen tot bestanden in cloudopslag. Externe locaties worden ondersteund, maar zijn niet de aanbevolen benadering. Zie Beheerde en externe tabellen.

In het volgende voorbeeld worden gegevens uit ADLS in een tabel geladen met behulp van externe locaties van Unity Catalog om toegang te bieden tot de brongegevens.

COPY INTO my_json_data
FROM 'abfss://container@storageAccount.dfs.core.windows.net/jsonData'
FILEFORMAT = JSON;

Overname van externe locatiebevoegdheden

Rechten voor externe locaties zijn van toepassing op alle geneste directories onder de opgegeven locatie.

Als u bijvoorbeeld toegang hebt tot een externe locatie die is gedefinieerd met de URL abfss://container@storageAccount.dfs.core.windows.net/raw-data, zijn de volgende opdrachten geldig:

COPY INTO landing_table
FROM 'abfss://container@storageAccount.dfs.core.windows.net/raw-data'
FILEFORMAT = PARQUET;

COPY INTO json_table
FROM 'abfss://container@storageAccount.dfs.core.windows.net/raw-data/json'
FILEFORMAT = JSON;

Machtigingen voor deze externe locatie verlenen geen bevoegdheden voor mappen boven of parallel aan de opgegeven locatie. Zo zijn geen van de volgende opdrachten geldig:

COPY INTO parent_table
FROM 'abfss://container@storageAccount.dfs.core.windows.net'
FILEFORMAT = PARQUET;

COPY INTO sibling_table
FROM 'abfss://container@storageAccount.dfs.core.windows.net/json-data'
FILEFORMAT = JSON;

Naamruimte op drie niveaus voor doeltabellen

U kunt zich richten op een Unity Catalog-tabel met behulp van een naamruimte met drie niveaus (<catalog_name>.<schema_name>.<table_name>). Gebruik de USE CATALOG <catalog_name> en USE SCHEMA <schema_name> opdrachten om de standaardcatalogus en het standaardschema in te stellen voor uw huidige query of notebook.

In het volgende voorbeeld worden gegevens van een volume in een tabel geladen met behulp van de naamruimte met drie niveaus:

COPY INTO quickstart_catalog.quickstart_schema.landing_table
FROM '/Volumes/quickstart_catalog/quickstart_schema/quickstart_volume/raw_data'
FILEFORMAT = PARQUET;

U kunt ook eerst de standaardcatalogus en het standaardschema instellen:

USE CATALOG quickstart_catalog;
USE SCHEMA quickstart_schema;

COPY INTO landing_table
FROM '/Volumes/quickstart_catalog/quickstart_schema/quickstart_volume/raw_data'
FILEFORMAT = PARQUET;