Interroger des tables externes avec partitionnement implicite
Sur Autonomous AI Database, vous pouvez créer des tables externes partitionnées implicites à partir de données partitionnées de style Hive ou de données partitionnées de dossier simples stockées dans votre banque d'objets cloud.
- A propos des tables externes avec partitionnement implicite
Sur la base de données Autonomous AI, 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 de données partitionnées de dossier simples stockées dans la banque d'objets cloud. - Requête de données partitionnées implicites externes avec l'organisation de fichier source au format Hive
Utilisez la procédureDBMS_CLOUD.CREATE_EXTERNAL_TABLEpour créer une table externe partitionnée implicite à partir de données de la banque d'objets générées à partir de données Hive. - Requête de 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 de données dans le stockage d'objets qui ont été générées à partir de données non Hive.
Rubrique parent : Interrogation des données externes avec la base de données d'IA autonome
A propos des tables externes avec partitionnement implicite
Sur 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 de données partitionnées de dossier simples stockées dans votre banque d'objets cloud.
En transmettant les options appropriées à cette procédure, les partitions sont dérivées des données source. Les tables externes partitionnées prennent en charge le repérage d'exécution des colonnes de partition et de leurs valeurs. Le repérage d'exécution des modifications dans la structure de banque d'objets sous-jacente, telles que l'ajout ou la suppression d'objets, simplifie le processus de maintenance en éliminant la nécessité de procédures de synchronisation supplémentaires requises par DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE. Cela garantit que les données sont à jour lors de l'exécution de la requête.
Avec le partitionnement implicite, Autonomous AI Database détermine automatiquement les colonnes sur lesquelles une table est "partitionnée" en fonction de la structure de fichier hiérarchique de la source de 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 avoir à 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 aux requêtes pour les requêtes de très grands ensembles de données à l'aide du partitionnement implicite, vous pouvez activer l'optimisation en définissant strict_column_order sur True. Le paramètre strict_column_order est une sous-option de l'option de format implicit_partition_config. Cette optimisation s'applique uniquement lorsque partition_type est une ruche. Pour obtenir un exemple, reportez-vous à Requête de données partitionnées implicites externes avec l'organisation de fichier source de format Hive et à Options de format de package 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 de dénomination suivants pour les objets partitionnés dans la banque d'objets :
- Format de dénomination Hive : les données dans le stockage d'objets qui ont été générées à partir de Hive ont le format suivant.
OBJBUCKET/<table>/<partcol1>=<value1>/<partcol2>=<value2>/file.parquetPour obtenir un exemple, reportez-vous à Interrogation de données partitionnées implicites externes avec l'organisation de fichier source au format Hive.
- Format de dénomination "Pathtail" non Hive : un deuxième format souvent trouvé 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.parquetPour obtenir un exemple, reportez-vous à Requête de données de style non-Hive partitionnées implicites externes.
Pour plus d'informations sur les formats de dénomination, reportez-vous à A 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 manières suivantes :
- Optimiser le partitionnement implicite. Utilisez l'option
implicit_partition_configpour activer le partitionnement implicite et l'optimisation du temps de requête écoulé.Dans cet exemple, le partitionnement implicite est activé en définissant
partition_typesur Hive. La seule valeur valide pourpartition_typeest hive. L'optimisation est activée en définissantsetting strict_column_ordersur True. L'optionpartition_columnsindique les colonnes qui sont partitionnées.Par 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 sur Hive avec une liste donnée de colonnes de partition
Dans ce cas,
implicit_partition_typeest défini surhiveetimplicit_partition_columnsfournit la liste des colonnes de partition.Par 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 sur Hive sans fournir de liste de colonnes de partition
Dans ce cas,
implicit_partition_typeest défini surhiveetimplicit_partition_columnsn'est pas fourni. Les colonnes de partition sont automatiquement détectées en recherchant '=' dans le chemin indiqué parfile_uri_list.column_namese trouve à gauche de "=" et la valeur se trouve sur le côté droit. Si aucune valeurcolumn_namen'est trouvée dans le chemin, une erreur est générée.Par 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 indiquer le type
Dans ce cas,
implicit_partition_typen'est pas défini etimplicit_partition_columnsfournit la liste des colonnes.Par 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, reportez-vous à Requête de données partitionnées implicites externes avec l'organisation de fichier source au format Hive et à Procédure CREATE_EXTERNAL_TABLE.
Rubrique parent : Interrogation de tables externes avec partitionnement implicite
Interrogation de données partitionnées implicites externes avec l'organisation du fichier source du format Hive
Utilisez la procédure DBMS_CLOUD.CREATE_EXTERNAL_TABLE pour créer une table externe partitionnée implicite à partir de données de la banque d'objets générées à partir de données Hive.
Les exemples de fichiers source dans l'exemple suivant utilisent le format de dénomination suivant :
OBJBUCKET/<table>/<partcol1>=<value1>/<partcol2>=<value2>/file.parquet
Examinez les exemples de fichiers 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 requêtes de banque d'objets avec l'option strict_column_order
Lorsqu'une requête cible un dossier de banque d'objets avec un très grand nombre de fichiers et de sous-dossiers, la phase de planification et de création de listes peut devenir le coût principal avant que les données ne soient réellement analysées. Ceci est courant avec les mises en page de dossiers de type Hive où les valeurs de partition sont intégrées dans le chemin.
Rubrique parent : Interrogation de tables externes avec partitionnement implicite
Optimiser la planification des requêtes de la banque d'objets avec l'option strict_column_order
Lorsqu'une requête cible un dossier de banque d'objets avec un très grand nombre de fichiers et de sous-dossiers, la phase de planification et de création de listes peut devenir le coût principal avant que les données ne soient réellement analysées. Ceci est courant avec les mises en page de dossiers de type 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 (telles que l'ajout, la suppression ou la réorganisation de colonnes de partition), vous devez mettre à jour l'option
partition_columnset 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 tous les objets, ce qui peut considérablement accélérer le temps de planification pour les ensembles de données volumineux.
Remarques 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 ensemble et une séquence fixes, sans réorganisation 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 style 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 liés (par exemple, les chemins appartenant à d'autres pays ou années) :
- Exécutez une requête sélective qui contraint 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 mise en page ne sont pas satisfaites, 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.
Les exemples de fichiers source dans l'exemple suivant utilisent le format de dénomination suivant :
OBJBUCKET/<table>/<value1>/<value2>/file.parquet
Examinez les exemples de fichiers 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 : Interrogation de tables externes avec partitionnement implicite