Charger des données à l’aide de COPY INTO volumes du catalogue Unity ou d’emplacements externes

Cet article explique comment utiliser la COPY INTO commande pour charger des données à partir d’un conteneur Azure Data Lake Storage (ADLS) dans votre compte Azure dans une table dans Databricks SQL.

Les étapes décrites dans cet article supposent que votre administrateur a configuré un volume de catalogue Unity ou un emplacement externe afin de pouvoir accéder à vos fichiers sources dans ADLS. Si votre administrateur a configuré une ressource de calcul pour utiliser un principal de service, consultez Charger des données à l’aide COPY INTO d’un principal de service ou tutoriel : COPY INTO avec Spark SQL à la place. Si votre administrateur vous a donné des identifiants temporaires (jeton SAS d’objet blob), suivez les étapes de chargement des données avec COPY INTO des identifiants temporaires à la place.

Databricks recommande d’utiliser des volumes pour accéder aux fichiers dans le stockage cloud dans le cadre du processus d’ingestion à l’aide de COPY INTO. Pour plus d’informations sur les recommandations relatives à l’utilisation de volumes et d’emplacements externes, consultez Meilleures pratiques Unity Catalog.

Avant de commencer

Avant de COPY INTO charger des données à partir d’un volume de catalogue Unity ou d’un chemin de stockage d’objets cloud défini comme emplacement externe du catalogue Unity, vous devez disposer des éléments suivants :

  • Le privilège READ VOLUME sur un volume ou le privilège READ FILES sur un emplacement externe. Pour plus d’informations sur la création de volumes, consultez la présentation des volumes Unity Catalog. Pour plus d’informations sur la création d’emplacements externes, consultez Vue d’ensemble des emplacements externes.

  • Le chemin d’accès à vos données sources sous la forme d’une URL de stockage d’objets cloud ou d’un chemin d’accès au volume.

    Exemple d’URL de stockage d’objets cloud : abfss://container@storageAccount.dfs.core.windows.net/raw-data/json.

    Exemple de chemin d’accès au volume : /Volumes/quickstart_catalog/quickstart_schema/quickstart_volume/raw_data/json.

  • Le privilège USE SCHEMA sur le schéma qui contient la table cible.

  • Le privilège USE CATALOG sur le catalogue parent.

Pour plus d’informations sur les privilèges du catalogue Unity, consultez référence des privilèges de catalogue Unity.

Charger des données à partir d’un volume

Pour charger des données à partir d’un volume Unity Catalog, vous devez disposer du privilège READ VOLUME. Les privilèges de volume s’appliquent à tous les répertoires imbriqués sous le volume spécifié.

Par exemple, si vous avez accès à un volume avec le chemin d'accès /Volumes/quickstart_catalog/quickstart_schema/quickstart_volume/, les commandes suivantes sont valides :

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;

Le préfixe de schéma dbfs: est également pris en charge avec les chemins de volume (par exemple dbfs:/Volumes/...), mais Databricks recommande d’utiliser le format de chemin /Volumes/ indiqué ci-dessus.

Charger des données à l’aide d’un emplacement externe

Note

Databricks recommande d’utiliser des volumes pour accéder aux fichiers dans le stockage cloud. Les emplacements externes sont pris en charge, mais ne sont pas l’approche recommandée. Consultez les tables managées et externes.

L’exemple suivant charge les données d’ADLS dans une table à l’aide d’emplacements externes du catalogue Unity pour fournir l’accès aux données sources.

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

Héritage du privilège d’emplacement externe

Les privilèges d’emplacement externe s’appliquent à tous les répertoires imbriqués sous l’emplacement spécifié.

Par exemple, si vous avez accès à un emplacement externe défini avec l’URL abfss://container@storageAccount.dfs.core.windows.net/raw-data, les commandes suivantes sont valides :

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;

Les autorisations sur cet emplacement externe n’accordent aucun privilège sur les répertoires ci-dessus ou parallèles à l’emplacement spécifié. Par exemple, aucune des commandes suivantes n’est valide :

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;

Espace de noms à trois niveaux pour les tables cibles

Vous pouvez cibler une table de catalogue Unity à l’aide d’un espace de noms de trois niveaux (<catalog_name>.<schema_name>.<table_name>). "Utilisez les commandes USE CATALOG <catalog_name> et USE SCHEMA <schema_name> pour définir le catalogue et le schéma par défaut de votre requête ou bloc-notes en cours."

L’exemple suivant charge les données d’un volume dans une table à l’aide de l’espace de noms à trois niveaux :

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

Vous pouvez également définir d’abord le catalogue et le schéma par défaut :

USE CATALOG quickstart_catalog;
USE SCHEMA quickstart_schema;

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