Interroger des tables externes avec partitionnement implicite

Sur Autonomous Database, vous pouvez créer des tables externes partitionnées implicites à partir de données partitionnées de type Hive ou à partir de données partitionnées de dossier simple stockées dans votre stockage d'objet cloud.

A propos des tables externes avec partitionnement implicite

Sur Autonomous 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 type Hive ou à partir de données partitionnées de dossier simple stockées dans votre stockage d'objet cloud.

Utilisez la procédure DBMS_CLOUD.CREATE_EXTERNAL_TABLE pour créer des tables externes partitionnées implicites. 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 lors de l'exécution des modifications apportées à 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 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 termes 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.

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 :

Pour plus d'informations sur les formats de nom, reportez-vous à A propos des tables externes avec partitionnement de fichier source.

A l'aide de la procédure DBMS_CLOUD.CREATE_EXTERNAL_TABLE, les tables externes partitionnées implicites peuvent être créées de l'une des manières suivantes :
  • Définir le type de partition sur ruche avec une liste donnée de colonnes de partition

    Dans ce cas, implicit_partition_type est défini sur hive et implicit_partition_columns fournit la liste des colonnes de partition.

    Exemples :

    DBMS_CLOUD.CREATE_EXTERNAL_TABLE (
       table_name        => 'mysales',
       credential_name   => 'mycredential',
       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"]}');
  • Définir le type de partition sur ruche sans fournir de liste de colonnes de partition

    Dans ce cas, implicit_partition_type est défini sur hive et implicit_partition_columns n'est pas fourni. Les colonnes de partition sont détectées automatiquement en recherchant '=' dans le chemin spécifié par file_uri_list. column_name est à gauche du signe "=" et la valeur est à droite. Si column_name est introuvable dans le chemin, une erreur est générée.

    Exemples :

    DBMS_CLOUD.CREATE_EXTERNAL_TABLE (
       table_name        => 'mysales',
       credential_name   => 'mycredential',
       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"');
  • Fournir la liste des colonnes de partition sans indiquer le type

    Dans ce cas, implicit_partition_type n'est pas défini et implicit_partition_columns fournit la liste des colonnes.

    Exemples :

    DBMS_CLOUD.CREATE_EXTERNAL_TABLE (
       table_name        => 'mysales',
       credential_name   => 'mycredential',
       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"]}');

Reportez-vous à la section Procédure CREATE_EXTERNAL_TABLE pour plus d'informations.

Interrogation des données partitionnées implicites externes avec l'organisation de fichier source 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 de la banque d'objets générées à partir des données Hive.

Les exemples de fichiers source de l'exemple suivant utilisent le format de dénomination 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 les données stockées dans cet exemple de format Hive, procédez comme suit :

  1. Stockez les informations d'identification de banque d'objets à l'aide de la procédure DBMS_CLOUD.CREATE_CREDENTIAL.

    Exemples :

    BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL (
        credential_name => 'DEF_CRED_NAME',
        username => 'adb_user@example.com',
        password => 'password' );
    END;
    /

    La création d'informations d'identification pour accéder à Oracle Cloud Infrastructure Object Storage n'est pas requise si vous activez les informations d'identification de principal de ressource. Pour plus d'informations, reportez-vous à Utilisation du principal de ressource pour accéder aux ressources Oracle Cloud Infrastructure.

    Cette opération stocke les informations d'identification dans la base de données dans un format crypté. Vous pouvez utiliser n'importe quel nom d'informations d'identification. Cette étape est requise une seule fois, sauf si les informations d'identification de banque d'objets changent. Une fois les informations d'identification stockées, vous pouvez utiliser le même nom pour la création de tables externes.

    Reportez-vous à Procédure CREATE_CREDENTIAL pour plus d'informations sur les paramètres username et password des différents services de stockage d'objet.

  2. Créez une table externe partitionnée implicite sur vos fichiers source à l'aide de la procédure DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE.
    Dans cet exemple, l'option de format implicit_partition_columns n'étant pas fournie, les colonnes de partition sont automatiquement détectées et le partitionnement implicite est activé en définissant l'option de format implicit_partition_type sur hive.

    Toutefois, si une liste de colonnes est fournie, ces colonnes sont utilisées en tant que colonnes de partition et Autonomous Database n'essaie pas de repérer les colonnes.

    Pour détecter les colonnes de partition, Autonomous Database lance une recherche à partir du début du chemin, indiqué par file_uri_list, pour '='. Lorsqu'elle est trouvée, la partie gauche de '=' jusqu'au dernier '/' est prise comme colonne (par exemple "pays") et la partie droite de '=', jusqu'à la première '/' comme valeur (par exemple "USA"). La recherche continue pour '=' jusqu'à ce qu'après le '/' qui suit la première valeur de partition, détectant le second '=' dans le chemin, etc.

    DBMS_CLOUD.CREATE_EXTERNAL_TABLE (
       table_name        => 'mysales',
       credential_name   => 'DEF_CRED_NAME',
       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"');

    Les paramètres sont les suivants :

    • table_name : nom de la table externe.

    • credential_name : nom des informations d'identification créées à l'étape précédente.

    • file_uri_list : liste des URI de fichier source séparés par des virgules. Il existe deux options pour cette liste :

      • Indiquez une liste d'URI de fichier individuels sans caractère générique séparés par des virgules.

      • Indiquez un URI de fichier unique avec des caractères génériques, où les caractères génériques ne peuvent se trouver qu'après la dernière barre oblique "/". Le caractère "*" peut être utilisé comme caractère générique pour représenter plusieurs caractères. Le caractère "?" peut être utilisé comme caractère générique pour représenter un seul caractère.

    • column_list : liste des noms de colonne et des types de données de la table externe, séparés par des virgules. La liste inclut les colonnes contenues dans le fichier de données et celles dérivées du nom d'objet (à partir des noms figurant dans le chemin de fichier indiqué par file_uri_list).

      Le paramètre column_list n'est pas requis lorsque les fichiers de données sont des fichiers structurés (Parquet, Avro ou ORC).

    • format : définit les options que vous pouvez indiquer pour décrire le format du fichier source. L'option implicit_partition_type indique le type de format de données comme ruche.

      Si les données de votre fichier source sont cryptées, déchiffrez-les en indiquant l'option de format encryption. Pour plus d'informations sur le décryptage des données, reportez-vous à Déchiffrement des données lors de l'import à partir d'Object Storage.

      Pour plus d'informations, reportez-vous à Options de format de package DBMS_CLOUD.

    Dans cet exemple, namespace-string est l'espace de noms de stockage d'objet Oracle Cloud Infrastructure et bucketname est le nom du bucket. Pour plus d'informations, reportez-vous à Présentation des espaces de noms Object Storage.

    Pour plus d'informations sur les paramètres, reportez-vous à Procédure CREATE_EXTERNAL_TABLE. Pour plus d'informations sur les services de stockage d'objet cloud pris en charge, reportez-vous à DBMS_CLOUD Formats d'URI.

  3. Vous pouvez maintenant exécuter des requêtes sur la table partitionnée externe que vous avez créée à l'étape précédente.

    Votre instance Autonomous Database utilise les informations de partitionnement de la table partitionnée externe, ce qui garantit que la requête accède uniquement aux fichiers de données pertinents dans la banque d'objets.

    Exemples :

    SELECT product, units FROM mysales WHERE year='2024' and month='02'

    Cette instruction SQL interroge uniquement les données de la partition pour le mois 02 de l'année 2024.

Interroger les 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 de données dans le stockage d'objet générées à partir de données non Hive.

Les exemples de fichiers source de l'exemple suivant utilisent le format de dénomination 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 les données stockées dans cet exemple de format Hive, procédez comme suit :

  1. Stockez les informations d'identification de banque d'objets à l'aide de la procédure DBMS_CLOUD.CREATE_CREDENTIAL.

    Exemples :

    BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL (
        credential_name => 'DEF_CRED_NAME',
        username => 'adb_user@example.com',
        password => 'password' );
    END;
    /

    La création d'informations d'identification pour accéder à Oracle Cloud Infrastructure Object Storage n'est pas requise si vous activez les informations d'identification de principal de ressource. Pour plus d'informations, reportez-vous à Utilisation du principal de ressource pour accéder aux ressources Oracle Cloud Infrastructure.

    Cette opération stocke les informations d'identification dans la base de données dans un format crypté. Vous pouvez utiliser n'importe quel nom d'informations d'identification. Cette étape est requise une seule fois, sauf si les informations d'identification de banque d'objets changent. Une fois les informations d'identification stockées, vous pouvez utiliser le même nom pour la création de tables externes.

    Reportez-vous à Procédure CREATE_CREDENTIAL pour plus d'informations sur les paramètres username et password des différents services de stockage d'objet.

  2. Créez une table externe partitionnée implicite sur vos fichiers source à l'aide de la procédure DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE.
    Dans cet exemple, le partitionnement implicite est activé en fournissant aux colonnes de partition l'option de format implicit_partition_columns. Etant donné que le nom du dossier n'inclut pas les colonnes de partition, les valeurs de partition dans le chemin, spécifiées par file_uri_list, ne peuvent être repérées que si une liste explicite de colonnes est fournie avec l'option de format implicit_partition_columns. Afin de détecter les valeurs de colonne respectives dans le chemin, l'ordre des colonnes doit être le même que l'ordre des valeurs.

    Les colonnes de partition sont détectées automatiquement.
    DBMS_CLOUD.CREATE_EXTERNAL_TABLE (
       table_name        => 'mysales',
       credential_name   => 'DEF_CRED_NAME',
       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"]}');

    Les paramètres sont les suivants :

    • table_name : nom de la table externe.

    • credential_name : nom des informations d'identification créées à l'étape précédente.

    • file_uri_list : liste des URI de fichier source séparés par des virgules. Il existe deux options pour cette liste :

      • Indiquez une liste d'URI de fichier individuels sans caractère générique séparés par des virgules.

      • Indiquez un URI de fichier unique avec des caractères génériques, où les caractères génériques ne peuvent se trouver qu'après la dernière barre oblique "/". Le caractère "*" peut être utilisé comme caractère générique pour représenter plusieurs caractères. Le caractère "?" peut être utilisé comme caractère générique pour représenter un seul caractère.

    • column_list : liste des noms de colonne et des types de données de la table externe, séparés par des virgules. La liste inclut les colonnes contenues dans le fichier de données et celles dérivées du nom d'objet (à partir des noms figurant dans le chemin de fichier indiqué par file_uri_list).

      Le paramètre column_list n'est pas requis lorsque les fichiers de données sont des fichiers structurés (Parquet, Avro ou ORC).

    • format : définit les options que vous pouvez indiquer pour décrire le format du fichier source. L'option implicit_partition_type n'est pas définie. Etant donné que implicit_partition_columns est indiqué, le type est automatiquement détecté comme non ruche.

      Si les données de votre fichier source sont cryptées, déchiffrez-les en indiquant l'option de format encryption. Pour plus d'informations sur le décryptage des données, reportez-vous à Déchiffrement des données lors de l'import à partir d'Object Storage.

      Pour plus d'informations, reportez-vous à Options de format de package DBMS_CLOUD.

    Dans cet exemple, namespace-string est l'espace de noms de stockage d'objet Oracle Cloud Infrastructure et bucketname est le nom du bucket. Pour plus d'informations, reportez-vous à Présentation des espaces de noms Object Storage.

    Pour plus d'informations sur les paramètres, reportez-vous à Procédure CREATE_EXTERNAL_TABLE.

    Pour plus d'informations sur les services de stockage d'objet cloud pris en charge, reportez-vous à DBMS_CLOUD Formats d'URI.

  3. Vous pouvez maintenant exécuter des requêtes sur la table partitionnée externe que vous avez créée à l'étape précédente.

    Votre instance Autonomous Database utilise les informations de partitionnement de la table partitionnée externe, ce qui garantit que la requête accède uniquement aux fichiers de données pertinents dans la banque d'objets.

    Exemples :

    SELECT product, units FROM mysales WHERE year='2024'

    Cette instruction SQL interroge uniquement les données de la partition pour l'année 2024.