À propos des tables externes avec partitionnement source
Dans Autonomous AI Database, vous pouvez créer des tables externes partitionnées à partir de données partitionnées de style Hive ou à partir de données partitionnées à dossier simple stockées dans votre magasin d'objets en nuage.
En utilisant le partitionnement du fichier source, au lieu de fournir une spécification de partition complète, la procédure extrait les informations de partitionnement du chemin d'accès du fichier pour certains modèles de fichier. Prenons par exemple les spécifications suivantes pour les fichiers de données :
-
Style Hive : par exemple :
sales/country=USA/year=2020/month=01/file1.csv -
Style de partitionnement de dossier simple : par exemple :
sales/USA/2020/01/file1.parquet
L'utilisation de l'un de ces formats de partitionnement courants simplifie considérablement la création et la gestion des tables externes partitionnées. En outre, même si les colonnes de partition peuvent ne pas apparaître dans le fichier de données, elles peuvent toujours être interrogées à l'aide de SQL. Le partitionnement des données améliore également les performances des requêtes en réduisant considérablement la quantité de données analysées. Dans cet exemple, lorsque vous interrogez les données 'USA', l'interrogation peut ignorer l'analyse des fichiers pour d'autres pays.
Format Hive - Données partitionnées dans le magasin d'objets en nuage
Hive offre un format de métadonnées standard pour les moteurs de traitement de mégadonnées. Les données partitionnées dans le magasin d'objets en nuage qui sont générées au format Hive sont représentées au format folder/subfolder. Par exemple, dans le magasin d'objets en nuage, un fichier de données au format Hive est stocké comme suit :
table/partition1=partition1_value/partition2=partition2_value/data_file.csv
Les fichiers enregistrés dans le format partitionné Hive fournissent des informations sur la partition dans le nom du chemin du fichier de données. Le chemin d'accès au fichier de données inclut des informations sur le contenu de l'objet, y compris les noms de colonne de partition et les valeurs de colonne de partition (le fichier de données n'inclut pas les colonnes de partition et leurs valeurs associées).
Par exemple, considérez une table SALES partitionnée externe créée à partir de données au format Hive dans le magasin d'objets en nuage :
.../sales/country=USA/year=2020/month=01/file1.csv
.../sales/country=USA/year=2020/month=01/file2.csv
.../sales/country=USA/year=2020/month=02/file3.csv
.../sales/country=USA/year=2020/month=03/file1.csv
.../sales/country=FRA/year=2020/month=03/file1.csv
Les informations sur la partition au format Hive indiquent que les fichiers de données du magasin d'objets en nuage sont partitionnés par country, year et month. Les valeurs de ces colonnes de partition sont également spécifiées dans le nom du chemin d'accès au format Hive pour chaque fichier de données (le nom du chemin inclut des valeurs pour les colonnes partitionnées : country, year et month).
Les noms de colonne du chemin seront utilisés par l'API pour simplifier la définition de la table.
Données partitionnées au format de dossier simple dans le magasin d'objets en nuage
Les données partitionnées dans le magasin d'objets en nuage qui sont générées au format de dossier sont représentées au format folder/subfolder, comme les données partitionnées au format Hive, mais les informations du chemin affichent les valeurs de colonne et n'incluent pas les noms de colonne. En outre, avec les données partitionnées au format de dossier, l'ordre de partition spécifié dans le nom de l'objet est significatif et doit correspondre à l'ordre dans les colonnes de la table.
Par exemple, dans le magasin d'objets en nuage, un fichier de données au format dossier est stocké comme suit :
table/partition1_value/partition2_value/*.parquet
Le chemin inclut les valeurs de colonne de partition, dans l'ordre des colonnes de partition, et les fichiers de données. Autonomous AI Database vous permet de créer une table partitionnée externe à partir de données de format de dossier et d'effectuer une interrogation à l'aide des partitions spécifiées.
Les fichiers enregistrés dans le format partitionné par dossier fournissent les valeurs de colonne de partition de données dans le nom du fichier. Contrairement à Hive, les chemins n'incluent pas le nom de colonne. Par conséquent, les noms de colonne doivent être fournis. L'ordre des colonnes de partition est important et l'ordre dans le nom de fichier pour les noms de partition de colonne doit correspondre à l'ordre dans le paramètre partition_columns.
À propos de l'interrogation des données partitionnées dans le magasin d'objets en nuage
Lorsque vous interrogez des données partitionnées externes au format Hive, le moteur d'interrogation comprend et utilise les informations de partitionnement du nom du chemin d'accès au fichier. Par exemple, considérez une table SALES partitionnée externe où le fichier source, sales/country=USA/year=2020/month=02/file3.csv sur le magasin d'objets inclut les données de vente suivantes :
tents, 291
canoes, 22
backpacks, 378
Les valeurs country dans le nom du chemin et les valeurs de période pour month et year ne sont pas spécifiées en tant que colonnes dans le fichier de données. Les valeurs de colonne de partition sont spécifiées uniquement dans le nom du chemin avec les valeurs suivantes : USA, 2020 et 02. Après avoir créé une table partitionnée externe avec ce fichier de données, vous pouvez utiliser les colonnes de partition et leurs valeurs lorsque vous exécutez une interrogation sur la table partitionnée externe.
Exemple :
SELECT year, month, product, units
FROM SALES WHERE year='2020' AND month='02' AND country='USA'
L'avantage de créer une table partitionnée externe avec des données générées en tant que données partitionnées au format Hive est que le moteur d'interrogation est optimisé pour élaguer les données afin de sélectionner la partition correcte et que l'interrogation sélectionne uniquement les données d'une partition et n'a besoin de rechercher qu'un seul fichier de données. Ainsi, l'interrogation ne nécessiterait qu'un balayage du fichier file3.csv (/sales/country=USA/year=2020/month=02/file3.csv). Pour de grandes quantités de données, un tel élagage de partition peut apporter d'importantes améliorations de performances.
À l'aide des tables externes Oracle Database standard, la colonne de partition doit être disponible en tant que colonne dans le fichier de données pour être utilisée pour les interrogations ou les définitions de partition. Sans le traitement spécial disponible avec les tables partitionnées externes sur Autonomous AI Database, ce serait un problème si vous souhaitez utiliser les données stockées au format Hive sur Cloud Object Store, car vous devrez régénérer les fichiers de données pour inclure la partition en tant que colonne dans le fichier de données.
À propos de la création de tables externes partitionnées
Lorsque vous utilisez des données non structurées stockées au format Hive dans le magasin d'objets en nuage et que vous créez une table partitionnée externe, les colonnes et leurs types ne peuvent pas être dérivés du fichier source. Ainsi, les colonnes et leurs types de données doivent être spécifiés avec le paramètre column_list. Pour créer les tables externes partitionnées, utilisez la procédure DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE pour spécifier les colonnes de partition et leurs types comme suit :
-
La racine de la liste de fichiers est spécifiée dans le nom du chemin d'accès avec le paramètre
file_uri_list. Par exemple,http://.../sales/* -
Les noms de colonne et les types de données sont spécifiés avec le paramètre
column_list. -
L'option
partition_columnsdans le paramètreformatspécifie les colonnes de partition. -
La DLL générée inclut les colonnes spécifiées dans le nom du chemin.
Pour cet exemple, lorsque la table externe est créée, les colonnes country, year et month sont ajoutées au paramètre column_list. La table externe est créée avec les colonnes country, year et month, qui ne se trouvent pas dans les fichiers de données, et des partitions de liste sont créées pour permettre l'élagage des partitions.
Lorsque vous utilisez des données structurées, telles que des fichiers Parquet, Avro ou ORC stockés dans un format de dossier dans le magasin d'objets en nuage, les colonnes et leurs types de données sont connus. Vous n'avez pas besoin de spécifier la liste de colonnes requise pour les données non structurées. Pour créer les tables externes partitionnées, utilisez la procédure DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE pour spécifier les colonnes de partition et leurs types comme suit :
- La racine de la liste de fichiers est spécifiée dans le nom du chemin d'accès avec le paramètre
file_uri_list. Par exemple,http://.../sales/* - Le paramètre
column_listn'est pas requis pour les fichiers structurés. Si vous ne spécifiez pas la liste de colonnes, vous devez définir les colonnes de partition et leurs types de données lorsque vous créez la table partitionnée externe. Utilisez l'optionpartition_columnsdans le paramètreformatpour spécifier les colonnes de partition et leurs types de données. - La DLL générée inclut les colonnes spécifiées dans le nom du chemin.
Pour des exemples complets, voir Interroger des données partitionnées externes avec organisation de fichiers sources au format Hive et Interroger des données partitionnées externes avec organisation de fichiers sources au format de dossier.
- Partitionnement externe : Fichiers sources CSV avec des dossiers de type Hive
Affiche comment créer des tables partitionnées externes avec des fichiers sources CSV stockés dans le magasin d'objets en nuage dans des dossiers de type Hive. - Partitionnement externe : Fichiers sources CSV avec des dossiers simples
Décrit comment créer des tables partitionnées externes avec des fichiers sources CSV stockés dans le magasin d'objets en nuage au format de dossier simple. - Partitionnement externe : Fichiers sources de parquet avec des dossiers de type Hive
Affiche comment créer des tables partitionnées externes avec des fichiers sources de parquet stockés dans le magasin d'objets en nuage dans des dossiers de type Hive. - Partitionnement externe : Parquet avec des dossiers simples
Affiche comment créer des tables partitionnées externes avec des fichiers sources Parquet stockés dans le magasin d'objets en nuage dans un format de dossier simple.
Partitionnement externe : Fichiers sources CSV avec des dossiers de type Hive
Indique comment créer des tables partitionnées externes avec des fichiers sources CSV stockés dans le magasin d'objets en nuage dans des dossiers de type Hive.
Liste des fichiers sources :
.../sales/country=USA/year=2020/month=01/file1.csv
.../sales/country=USA/year=2020/month=01/file2.csv
.../sales/country=USA/year=2020/month=02/file3.csv
.../sales/country=USA/year=2020/month=03/file1.csv
.../sales/country=FRA/year=2020/month=03/file1.csvAPI :
DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE (
table_name => 'mysales',
credential_name => 'mycredential',
file_uri_list => 'https://objectstorage.us-phoenix-1.oraclecloud.com/.../sales/*.csv',
column_list => 'product varchar2(100), units number, country varchar2(100), year number, month varchar2(2)',
field_list => 'product, units', --[Because country, year and month are not in the file, they are not listed in the field list]
format => '{"type":"csv","partition_columns":["country", "year", "month"]}');Le paramètre
partition_columns du paramètre format doit correspondre aux noms de colonne trouvés dans le chemin (par exemple, la colonne country correspond à "country=…")
Rubrique parent : À propos des tables externes avec partitionnement source
Partitionnement externe : Fichiers sources CSV avec des dossiers simples
Indique comment créer des tables partitionnées externes avec des fichiers sources CSV stockés dans le magasin d'objets en nuage au format de dossier simple.
Liste des fichiers sources :
.../sales/USA/2020/01/file1.csv
.../sales/USA/2020/01/file2.csv
.../sales/USA/2020/02/file3.csv
.../sales/USA/2020/03/file1.csv
.../sales/FRA/2020/03/file1.csvAPI :
DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE(
table_name => 'mysales',
credential_name => 'mycredential',
file_uri_list => 'https://objectstorage.us-phoenix-1.oraclecloud.com/.../sales/*.csv',
column_list => 'product varchar2(100), units number, country varchar2(100), year number, month varchar2(2)',
field_list => 'product, units', --[Because country, year and month are not in the file, they are not listed in the field list]
format => '{"type":"csv","partition_columns":["country", "year", "month"]}');L'appel d'API est le même que dans l'exemple précédent, mais l'ordre de
partition_columns dans le paramètre format est important car le nom de colonne ne se trouve pas dans le chemin d'accès au fichier.
Rubrique parent : À propos des tables externes avec partitionnement source
Partitionnement externe : Fichiers sources de parquet avec des dossiers de type Hive
Décrit comment créer des tables partitionnées externes avec des fichiers sources Parquet stockés dans le magasin d'objets en nuage dans des dossiers de type Hive.
Liste des fichiers sources :
.../sales/USA/2020/01/file1.parquet
.../sales/USA/2020/01/file2.parquet
.../sales/USA/2020/02/file3.parquet
.../sales/USA/2020/03/file1.parquet
.../sales/FRA/2020/03/file1.parquet
API :
DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE (
table_name => 'mysales',
credential_name => 'mycredential',
file_uri_list => 'https://objectstorage.us-phoenix-1.oraclecloud.com/.../sales/*.parquet',
format =>
json_object( 'type' value 'parquet',
'schema' value 'first',
'partition_columns' value
json_array(
json_object('name' value 'country', 'type' value 'varchar2(100)'),
json_object('name' value 'year', 'type' value 'number'),
json_object('name' value 'month', 'type' value 'varchar2(2)')
)
)
);Le paramètre
column_list n'est pas spécifié. Comme indiqué, pour chaque colonne de partition, spécifiez le nom et le type de données dans le paramètre format partition_columns.
Rubrique parent : À propos des tables externes avec partitionnement source
Partitionnement externe : Parquet avec dossiers simples
Indique comment créer des tables partitionnées externes avec des fichiers sources Parquet stockés dans le magasin d'objets en nuage dans un format de dossier simple.
Liste des fichiers sources :
.../sales/USA/2020/01/file1.parquet
.../sales/USA/2020/01/file2.parquet
.../sales/USA/2020/02/file3.parquet
.../sales/USA/2020/03/file1.parquet
.../sales/FRA/2020/03/file1.parquetAPI :
DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE (
table_name => 'mysales',
credential_name => 'mycredential',
file_uri_list => 'https://objectstorage.us-phoenix-1.oraclecloud.com/.../sales/*.parquet',
format =>
json_object( 'type' value 'parquet',
'schema' value 'first',
'partition_columns' value
json_array(
json_object('name' value 'country', 'type' value 'varchar2(100)'),
json_object('name' value 'year', 'type' value 'number'),
json_object('name' value 'month', 'type' value 'varchar2(2)')
)
)
);Le paramètre
column_list n'est pas spécifié. Vous devez inclure à la fois le nom et le type de données pour les colonnes de partition. En outre, l'ordre de partition_columns dans la clause de format est important car le nom de colonne ne figure pas dans le chemin d'accès au fichier.
Rubrique parent : À propos des tables externes avec partitionnement source