Aller au contenu principal

Chargez des données à l’aide de COPY INTO avec des volumes Unity Catalog ou des emplacements externes.

Cet article décrit comment utiliser la commande COPY INTO pour charger des données d'un compartiment Amazon S3 (S3) dans votre compte AWS vers une table dans Databricks SQL.

Les étapes de cet article supposent que votre administrateur a configuré un volume Unity Catalog ou un emplacement externe afin que vous puissiez accéder à vos fichiers source dans S3. Si votre administrateur a configuré une ressource de compute pour utiliser un profil d'instance AWS, consultez plutôt Charger des données à l'aide de COPY INTO avec un profil d'instance ou Didacticiel : COPY INTO avec Spark SQL. Si votre administrateur vous a donné des informations d'identification temporaires (un ID de clé d'accès AWS, une clé secrète et un jeton de session), consultez plutôt Charger des données à l'aide de COPY INTO avec des informations d'identification temporaires.

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 d’utilisation des volumes et des emplacements externes, consultez les bonnes pratiques de Unity Catalog.

Avant de commencer

Avant d'utiliser COPY INTO pour charger des données à partir d'un volume Unity Catalog ou d'un chemin de stockage d'objets cloud défini comme un emplacement externe Unity Catalog, 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 Que sont les volumes Unity Catalog ?. Pour plus d'information sur la création d'emplacements externes, consultez la présentation des emplacements externes.

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

    Exemple d'URL de stockage d'objets cloud : s3://landing-bucket/raw-data/json.

    Exemple de chemin de 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 Unity Catalog, consultez la référence des privilèges Unity Catalog.

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 /Volumes/quickstart_catalog/quickstart_schema/quickstart_volume/, les commandes suivantes sont valides :

SQL
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

remarque

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. Voir Tables gérées et externes.

L'exemple suivant charge des données de S3 dans une table en utilisant les emplacements externes de Unity Catalog pour fournir un accès aux données sources.

SQL
COPY INTO my_json_data
FROM 's3://landing-bucket/json-data'
FILEFORMAT = JSON;

Héritage des privilèges de l'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 s3://landing-bucket/raw-data, les commandes suivantes sont valides :

SQL
COPY INTO landing_table
FROM 's3://landing-bucket/raw-data'
FILEFORMAT = PARQUET;

COPY INTO json_table
FROM 's3://landing-bucket/raw-data/json'
FILEFORMAT = JSON;

Les autorisations sur cet emplacement externe n'accordent aucun privilège sur les répertoires situés au-dessus ou en parallèle de l'emplacement spécifié. Par exemple, aucune des commandes suivantes n'est valide :

SQL
COPY INTO parent_table
FROM 's3://landing-bucket'
FILEFORMAT = PARQUET;

COPY INTO sibling_table
FROM 's3://landing-bucket/json-data'
FILEFORMAT = JSON;

Espace de noms à trois niveaux pour les tables cibles

Vous pouvez cibler une table Unity Catalog en utilisant un espace de noms à 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 default pour votre query ou Notebook actuel.

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

SQL
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 le catalogue et le schéma default tout d'abord :

SQL
USE CATALOG quickstart_catalog;
USE SCHEMA quickstart_schema;

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