Interroger des tables externes avec partitionnement implicite
Sur Autonomous AI Database, vous pouvez créer des tables externes partitionnées implicitement à 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.
- À propos des tables externes avec partitionnement implicite
Dans Autonomous AI Database, utilisez la procédureDBMS_CLOUD.CREATE_EXTERNAL_TABLEpour créer des tables externes partitionnées implicites à partir de données partitionnées de style Hive ou à partir de données partitionnées de dossier simple stockées dans votre magasin d'objets en nuage. - Interroger les données partitionnées implicites externes au moyen de l'organisation de fichiers source au format Hive
Utilisez la procédureDBMS_CLOUD.CREATE_EXTERNAL_TABLEpour créer une table externe partitionnée implicite à partir des données du magasin d'objets qui ont été générées à partir des données Hive. - Interroger les données de style non Hive partitionnées implicites externes
Utilisez la procédureDBMS_CLOUD.CREATE_EXTERNAL_TABLEpour créer une table externe partitionnée implicite à partir des données du stockage d'objets qui ont été générées à partir de données non Hive.
À propos des tables externes avec partitionnement implicite
Dans Autonomous AI Database, utilisez la procédure DBMS_CLOUD.CREATE_EXTERNAL_TABLE pour créer des tables externes partitionnées implicites à partir de données partitionnées de style Hive ou à partir de données partitionnées par dossier simple stockées dans votre magasin d'objets en nuage.
En transmettant les options appropriées à cette procédure, les partitions sont dérivées des données sources. Les tables externes partitionnées prennent en charge la détection d'exécution des colonnes de partition et de leurs valeurs. La détection à l'exécution des modifications apportées à la structure du magasin d'objets sous-jacent, telles que l'ajout ou la suppression d'objets, simplifie le processus de maintenance en éliminant le besoin de procédures de synchronisation supplémentaires requises par DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE. Cela garantit que les données sont à jour au moment de l'exécution de l'interrogation.
Avec le partitionnement implicite, Autonomous AI Database détermine automatiquement les colonnes sur lesquelles une table est "partitionnée" en fonction de la structure hiérarchique du fichier source du stockage d'objets. Il n'est pas nécessaire de déclarer explicitement un schéma de partitionnement. Le partitionnement implicite offre des avantages en matière de performances de type table de partition sans qu'il soit nécessaire de définir explicitement une table externe partitionnée à l'aide de la procédure DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE.
Afin d'optimiser le temps de réponse des interrogations pour les interrogations de jeux de données très volumineux à l'aide du partitionnement implicite, vous pouvez activer l'optimisation en réglant strict_column_order à Vrai. Le paramètre strict_column_order est une sous-option de l'option de format implicit_partition_config. Cette optimisation ne s'applique que lorsque partition_type est ruche. Voir Interroger les données partitionnées implicites externes avec l'organisation du fichier source au format Hive pour un exemple et Options de format d'ensemble DBMS_CLOUD pour plus d'informations sur les paramètres de format de partitionnement implicite.
Les tables externes partitionnées implicites prennent en charge les styles d'attribution de nom suivants pour les objets partitionnés dans le magasin d'objets :
- Format d'attribution de nom Hive : Les données du stockage d'objets générées à partir de Hive ont le format suivant.
OBJBUCKET/<table>/<partcol1>=<value1>/<partcol2>=<value2>/file.parquetPar exemple, voir Interroger des données partitionnées implicites externes au moyen d'une organisation de fichier source au format Hive
- Format d'attribution de nom non Hive "Pathtail" : Un deuxième format qui se trouve souvent dans les lacs de données est similaire au format de ruche, mais le nom du dossier n'inclut pas les colonnes de partition.
OBJBUCKET/<table>/<value1>/<value2>/file.parquetPar exemple, voir Interroger les données de style non Hive partitionnées implicites externes.
Pour plus d'informations sur les formats d'attribution de nom, voir À propos des tables externes avec partitionnement de fichier source.
DBMS_CLOUD.CREATE_EXTERNAL_TABLE, les tables externes partitionnées implicites peuvent être créées de l'une des façons suivantes :
- Optimiser le partitionnement implicite. Utilisez l'option
implicit_partition_configpour activer le partitionnement implicite et l'optimisation du temps d'interrogation écoulé.Dans cet exemple, le partitionnement implicite est activé en réglant
partition_typeà ruche. La seule valeur valide pourpartition_typeest ruche. L'optimisation est activée en réglantsetting strict_column_orderà Vrai. L'optionpartition_columnsspécifie les colonnes qui sont partitionnées.Exemple :
BEGIN dbms_cloud.create_external_table ( table_name => 'partitions1', file_uri_list => 'https://swiftobjectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/*.parquet', column_list => 'c varchar2(100), y number, total_sales number', format => '{"type":"parquet", "implicit_partition_config":{ "partition_type":"hive", "strict_column_order":true, "partition_columns":["org","tenant","dbtype","year","month","day"] } }'); END; / - Définir le type de partition pour rucher avec une liste de colonnes de partition donnée
Dans ce cas,
implicit_partition_typeest réglé àhiveetimplicit_partition_columnsfournit une liste de colonnes de partition.Exemple :
BEGIN DBMS_CLOUD.CREATE_EXTERNAL_TABLE ( table_name => 'mysales', credential_name => 'MY_CREDENTIAL', file_uri_list => 'https://swiftobjectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/*.parquet', column_list => 'product varchar2(100), units number, country varchar2(100),year (number), month varchar2(2)', format => '{"type":"parquet", "implicit_partition_type":"hive", "implicit_partition_columns":["country","year","month"]}'); END; / - Définir le type de partition à ruche sans fournir de liste de colonnes de partition
Dans ce cas,
implicit_partition_typeest réglé àhiveetimplicit_partition_columnsn'est pas fourni. Les colonnes de partition sont automatiquement détectées en recherchant '=' dans le chemin spécifié parfile_uri_list. La valeurcolumn_nameest à gauche de '=' et la valeur est sur le côté droit. Sicolumn_nameest introuvable dans le chemin, une erreur est générée.Exemple :
BEGIN DBMS_CLOUD.CREATE_EXTERNAL_TABLE ( table_name => 'mysales', credential_name => 'MY_CREDENTIAL', file_uri_list => 'https://swiftobjectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/*.parquet', column_list => 'product varchar2(100), units number, country varchar2(100),year (number), month varchar2(2)', format => '{"type":"parquet", "implicit_partition_type":"hive"'); END; / - Fournir une liste de colonnes de partition sans spécifier le type
Dans ce cas,
implicit_partition_typen'est pas défini etimplicit_partition_columnsfournit une liste de colonnes.Exemple :
BEGIN DBMS_CLOUD.CREATE_EXTERNAL_TABLE ( table_name => 'mysales', credential_name => 'MY_CREDENTIAL', file_uri_list => 'https://swiftobjectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/*.parquet', column_list => 'product varchar2(100), units number, country varchar2(100),year (number), month varchar2(2)', format => '{"type":"parquet", "implicit_partition_columns":["country","year","month"]}'); END; /
Pour plus d'informations, voir Interroger les données partitionnées implicites externes au moyen de l'organisation du fichier source au format Hive et Procédure CREATE_EXTERNAL_TABLE.
Rubrique parent : Interroger des tables externes avec partitionnement implicite
Interroger des données partitionnées implicites externes avec organisation de fichiers sources au format Hive
Utilisez la procédure DBMS_CLOUD.CREATE_EXTERNAL_TABLE pour créer une table externe partitionnée implicite à partir des données du magasin d'objets qui ont été générées à partir des données Hive.
Dans l'exemple suivant, utilisez le format d'attribution de nom suivant :
OBJBUCKET/<table>/<partcol1>=<value1>/<partcol2>=<value2>/file.parquet
Examinez les exemples de fichier source suivants :
OBJBUCKET/sales/country=USA/year=2024/month=01/sales-2024-01.parquet
OBJBUCKET/sales/country=USA/year=2024/month=02/sales-2024-02.parquet
OBJBUCKET/sales/country=USA/year=2024/month=02/sales-2024-03.parquet
Pour créer une table externe partitionnée implicite avec des données stockées dans cet exemple de format Hive, procédez comme suit :
- Optimiser la planification des interrogations du magasin d'objets avec l'option strict_column_order
Lorsqu'une interrogation cible un dossier de magasin d'objets avec un très grand nombre de fichiers et de sous-dossiers, la phase de planification et de liste peut devenir le coût principal avant que les données ne soient réellement balayées. Cela est courant avec les dispositions de dossier de style Hive où les valeurs de partition sont intégrées dans le chemin.
Rubrique parent : Interroger des tables externes avec partitionnement implicite
Optimiser la planification des interrogations du magasin d'objets avec l'option strict_column_order
Lorsqu'une interrogation cible un dossier de magasin d'objets avec un très grand nombre de fichiers et de sous-dossiers, la phase de planification et de liste peut devenir le coût principal avant que les données ne soient réellement balayées. Cela est courant avec les dispositions de dossier de style Hive où les valeurs de partition sont intégrées dans le chemin.
-
Le paramètre
strict_column_orderest désactivé par défaut. Activer uniquement si la disposition du chemin est cohérente. -
Si les conventions de dossier changent (par exemple, l'ajout, la suppression ou le réorganisation des colonnes de partition), vous devez mettre à jour l'option
partition_columnset devrez peut-être désactiver cette option.
Activez l'option strict_column_order comme suit :
Si vos données utilisent des chemins partitionnés de type Hive et que les colonnes de partition apparaissent toujours dans un ordre fixe et cohérent sans segments manquants, activez l'optimisation en utilisant le paramètre suivant :
strict_column_order = true (with partition_type = "hive")La base de données peut ignorer les répertoires inutiles en suivant l'ordre des partitions déjà définies. Cela signifie qu'il n'a pas besoin de répertorier chaque objet, ce qui peut accélérer considérablement le temps de planification pour les jeux de données volumineux.
Notes sur l'utilisation de l'option strict_column_order :
-
Les chemins suivent le nom et l'ordre Hive, par exemple :
.../country=US/year=2025/month=09/... -
Les colonnes de partition conservent un jeu et une séquence fixes, sans réordonnancement ni préfixes ignorés.
- Vous devez optimiser la liste de planification pour les dossiers contenant un très grand nombre d'objets.
- Vous ne pouvez pas utiliser cette option dans les jeux de données où tous les préfixes ne sont pas présents. Par exemple, certains dossiers incluent year=, tandis que d'autres commencent par month=).
Exemples : Utilisez l'option strict_column_order pour les partitions de type Hive avec DBMS_CLOUD.CREATE_EXTERNAL_TABLE
BEGIN
DBMS_CLOUD.CREATE_EXTERNAL_TABLE (
table_name => 'sales_xt',
credential_name => 'MY_CREDENTIAL',
file_uri_list => 'https://objectstorage.example.com/n/tenant/b/lake/o/sales/',
-- Data is stored as: .../country=US/year=2025/month=09/*.parquet
column_list => 'product VARCHAR2(100),
units NUMBER,
amount NUMBER,
country VARCHAR2(30),
year NUMBER,
month NUMBER',
format => '{
"type": "parquet",
"implicit_partition_config": {
"partition_type": "hive",
"partition_columns": ["country","year","month"],
"strict_column_order": true
}
}'
);
END;
/
Vérifiez que la logique de planification évite de répertorier les chemins de niveau supérieur non associés (par exemple, les chemins appartenant à d'autres pays ou années) :
- Exécutez une interrogation sélective qui restreint les partitions principales, par exemple :
avecSELECT COUNT(*) FROM sales_xt WHERE country = ''US'' AND year = 2025;
.strict_column_order = true - Si les hypothèses de disposition ne sont pas remplies, désactivez l'option et réessayez.
Interroger des données de style non Hive partitionnées implicites externes
Utilisez la procédure DBMS_CLOUD.CREATE_EXTERNAL_TABLE pour créer une table externe partitionnée implicite à partir des données du stockage d'objets qui ont été générées à partir de données non Hive.
Dans l'exemple suivant, utilisez le format d'attribution de nom suivant :
OBJBUCKET/<table>/<value1>/<value2>/file.parquet
Examinez les exemples de fichier source suivants :
OBJBUCKET/sales/USA/2024/01/sales-2024-01.parquet
OBJBUCKET/sales/USA/2024/01/sales-2024-02.parquet
OBJBUCKET/sales/USA/2024/01/sales-2024-03.parquet
Pour créer une table externe partitionnée implicite avec des données stockées dans cet exemple de format Hive, procédez comme suit :
Rubrique parent : Interroger des tables externes avec partitionnement implicite