Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Important
Cette fonctionnalité est disponible en préversion publique.
La _object_metadata colonne est une colonne de métadonnées masquée qui expose les propriétés au niveau de l’objet cloud pour chaque fichier lu par une source de données basée sur un fichier. Contrairement _metadata à (qui contient des informations telles que le chemin d’accès de fichier, la taille et le temps de modification), _object_metadata fournit des propriétés de couche de stockage plus riches extraites via des API cloud, notamment le type MIME, les métadonnées clé-valeur définies par l’utilisateur, les métadonnées définies par le système et les balises d’objet.
La _object_metadata colonne nécessite Databricks Runtime 18.2 ou supérieur et est disponible pour tous les formats de fichiers d’entrée lors de la lecture depuis le stockage d’objets dans le cloud. Pour inclure la _object_metadata colonne dans le DataFrame retourné, vous devez la sélectionner explicitement dans la requête de lecture où vous spécifiez la source.
Si la source de données contient une colonne nommée _object_metadata, les requêtes sur _object_metadata renvoient la colonne de la source de données, et non les métadonnées de l’objet cloud. Pour accéder à la colonne de métadonnées d’objet cloud dans ce cas, ajoutez un trait de soulignement supplémentaire (__object_metadata). Répétez si __object_metadata entre également en collision.
Les métadonnées de fichier courantes telles que le chemin d’accès ou la taille du fichier peuvent être interrogées à l’aide de la _metadata colonne. Pour plus d’informations sur la _metadata colonne, consultez la colonne de métadonnées de fichier.
Avertissement
De nouveaux champs peuvent être ajoutés à la colonne _object_metadata dans les versions futures. Pour éviter les erreurs d’évolution du schéma si la _object_metadata colonne est mise à jour, vous pouvez sélectionner des champs spécifiques dans la colonne dans vos requêtes. Consultez Exemples.
Schema
La _object_metadata colonne contient STRUCT les champs suivants, disponibles à partir de Databricks Runtime 18.2. Tous les champs sont nullables.
| Nom | Catégorie | Description | Example |
|---|---|---|---|
| mime_type | STRING |
Type MIME (type de contenu) de l’objet, par exemple application/parquet ou text/csv. |
application/parquet |
| etag | STRING |
ETag de l’objet. Les ETags sont utiles pour détecter les modifications ou le contrôle de version. | "abc123def456" |
| user_metadata | VARIANT |
Paires clé-valeur de métadonnées définies par l’utilisateur stockées sur l’objet. Par exemple, dans S3, il s’agit d’en-têtes de métadonnées définis par l’utilisateur. Consultez les en-têtes de métadonnées définis par l’utilisateur dans la documentation AWS. Dans Azure Blob, il s’agit de métadonnées définies par l’utilisateur. Consultez Manage blob properties and metadata with .NET dans la documentation Azure. | {"my_key":"my_value"} |
| system_metadata | VARIANT |
Des paires clé-valeur définies par le système par le fournisseur de stockage cloud. | {"Content-Length":"1024", ...} |
| balises | VARIANT |
Paires clé-valeur de balise d’objet définies par l’utilisateur stockées sur l’objet. Par exemple, dans S3, il s’agit de balises d’objet. Consultez catégoriser vos objets à l’aide de balises dans la documentation AWS. Tous les services de stockage cloud ne prennent pas en charge les balises d’objet. Consultez les notes relatives au comportement par fournisseur. | {"my_tag":"my_value"} |
Exemples
Les exemples suivants montrent comment lire et interroger la colonne _object_metadata à l’aide de différentes méthodes d’ingestion.
Lire un lot de fichiers
L’exemple suivant lit un fichier CSV et sélectionne les colonnes _metadata et _object_metadata.
Python
path = "<path-to-load-from>"
df = spark.read.format("csv").load(path)
display(df.select("*", "_metadata", "_object_metadata"))
Scala
val path = "<path-to-load-from>"
val df = spark.read.format("csv").load(path)
display(df.select("*", "_metadata", "_object_metadata"))
Diffuser des fichiers avec le chargeur automatique
L’exemple suivant utilise le chargeur automatique pour diffuser en continu des fichiers à partir du stockage cloud et écrire la _object_metadata colonne dans une table Delta.
Python
path = "<path-to-load-from>"
checkpoint = "<checkpoint-path>"
schema_location = "<schema-location-path>"
table = "<output-table-path>"
dsw = (spark.readStream
.format("cloudFiles")
.option("cloudFiles.format", "text")
.option("cloudFiles.schemaLocation", schema_location)
.option("header", "true")
.load(path)
.selectExpr("*", "_metadata as md", "_object_metadata as obj_md")
.writeStream
.format("delta")
.option("checkpointLocation", checkpoint)
.trigger(once=True)
.start(table)
)
dsw.awaitTermination()
df = spark.read.format("delta").load(table).select("value", "md", "obj_md")
display(df)
Scala
val path = "<path-to-load-from>"
val checkpoint = "<checkpoint-path>"
val schemaLocation = "<schema-location-path>"
val table = "<output-table-path>"
val dsw = spark.readStream
.format("cloudFiles")
.option("cloudFiles.format", "text")
.option("cloudFiles.schemaLocation", schemaLocation)
.option("header", "true")
.load(path)
.selectExpr("*", "_metadata as md", "_object_metadata as obj_md")
.writeStream
.format("delta")
.option("checkpointLocation", checkpoint)
.trigger(Trigger.Once)
.start(table)
dsw.awaitTermination()
val df = spark.read.format("delta").load(table).select("value", "md", "obj_md")
display(df)
Sélectionner des champs spécifiques
Pour éviter les erreurs d’évolution de schéma dues à de futures modifications de _object_metadata, sélectionnez uniquement les champs précis dont vous avez besoin.
Python
path = "<path-to-load-from>"
(spark.read
.format("csv")
.schema(schema)
.load(path)
.select("_object_metadata.user_metadata", "_object_metadata.tags", "_object_metadata.etag"))
Scala
val path = "<path-to-load-from>"
spark.read
.format("csv")
.schema(schema)
.load(path)
.select("_object_metadata.user_metadata", "_object_metadata.tags", "_object_metadata.etag")
Utiliser avec COPY INTO
L’exemple suivant utilise COPY INTO pour charger des fichiers dans une table Delta lors de la sélection de la _object_metadata colonne.
COPY INTO my_delta_table
FROM (
SELECT *, _object_metadata FROM '<path-to-load-from>'
)
FILEFORMAT = CSV
Extraire des valeurs de VARIANT champs
Les champs user_metadata, system_metadata et tags sont de type VARIANT. L’exemple suivant extrait des valeurs spécifiques à l’aide de l’opérateur :: de cast. Vous pouvez extraire des valeurs spécifiques à l’aide de l’opérateur de transtypage :: ou des fonctions VARIANT. Consultez VARIANT type.
Python
path = "<path-to-load-from>"
(spark.read
.format("csv")
.schema(schema)
.load(path)
.selectExpr(
"*",
"_object_metadata.user_metadata:my_key::string as my_key",
"_object_metadata.tags:environment::string as env_tag"
))
SQL
SELECT
*,
_object_metadata.user_metadata:my_key::STRING AS my_key,
_object_metadata.tags:environment::STRING AS env_tag
FROM csv.`<path-to-load-from>`
Remarques
Gardez à l’esprit ce qui suit lors de l’utilisation _object_metadata.
- La colonne
_object_metadatafonctionne avec Amazon S3, Azure DFS, Azure Blob et GCP. - La sélection d’un champ dans
_object_metadatadéclenche jusqu’à deux appels supplémentaires à l’API du cloud par fichier, de sorte que les requêtes portant sur un grand nombre de petits fichiers peuvent subir une certaine augmentation de la latence. -
_object_metadata.tagsest pris en charge pour S3 et Stockage Blob Azure (non-HNS,blob.core.windows.net). Sur tous les autres fournisseurs (Azure DFS, WASB, GCP),tagsretourne{}. - Pour S3, les informations d’identification doivent disposer de l’autorisation
s3:GetObjectTagging. S’il n’est pas disponible,tagsretournenull. - Si Databricks rencontre une erreur lors de l’extraction des balises à partir d’un fournisseur pris en charge,
tagsretournenull. - Les métadonnées système, les métadonnées utilisateur et les balises ne sont pas disponibles pour le stockage géré par Databricks et sont définies sur
null.