

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Utilisation d’un metastore Hive externe
<a name="connect-to-data-source-hive"></a>

Vous pouvez utiliser le connecteur de données Amazon Athena pour le métastore Hive externe afin d'interroger les jeux de données Simple Storage Service (Amazon S3) qui utilisent un métastore Apache Hive. Aucune migration des métadonnées vers le AWS Glue Data Catalog n'est nécessaire. Dans la console de gestion Athena, vous configurez une fonction Lambda pour communiquer avec le métastore Hive qui se trouve dans votre VPC privé, puis vous la connectez au métastore. La connexion de Lambda à votre métastore Hive est sécurisée par un canal privé Amazon VPC et n'utilise pas l'internet public. Vous pouvez fournir votre propre code de fonction Lambda ou utiliser l'implémentation par défaut du connecteur de données Athena pour le métastore Hive externe.

**Topics**
+ [Présentation des fonctions](#connect-to-a-data-source-hive-features)
+ [Flux de travail](#connect-to-data-source-hive-workflow)
+ [Considérations et restrictions](#connect-to-a-data-source-hive-considerations)
+ [Connexion d’Athena à un metastore Apache Hive](connect-to-data-source-hive-connecting-athena-to-an-apache-hive-metastore.md)
+ [Utilisez le AWS Serverless Application Repository pour déployer un connecteur de source de données Hive](connect-data-source-sar-hive.md)
+ [Connexion d’Athena à un métastore Hive à l’aide d’un rôle d’exécution IAM existant](connect-data-source-hive-existing-iam-role.md)
+ [Configuration d'Athena pour utiliser un connecteur de métastore Hive déployé](connect-data-source-hive-existing-lambda.md)
+ [Omission du nom du catalogue dans des requêtes de métastore Hive externe](datastores-hive-default-catalog.md)
+ [Utilisation des vues Hive](hive-views.md)
+ [Utilisez les AWS CLI métastores with Hive](datastores-hive-cli.md)
+ [Modification du connecteur Athena pour métastore Hive externe](datastores-hive-reference-implementation.md)

## Présentation des fonctions
<a name="connect-to-a-data-source-hive-features"></a>

Avec le connecteur de données Athena pour métastore Hive externe, vous pouvez effectuer les tâches suivantes :
+ Utiliser la console Athena pour enregistrer des catalogues personnalisés et exécuter des requêtes à l'aide de ceux-ci.
+ Définir des fonctions Lambda pour différents métastores externes de Hive et les joindre dans des requêtes Athena.
+ Utilisez les métastores Hive AWS Glue Data Catalog et vos métastores externes dans la même requête Athena.
+ Spécifiez un catalogue dans le contexte d'exécution de requête en tant que catalogue par défaut actuel. Cela supprime la nécessité de préfixer les noms de catalogue aux noms de base de données dans vos requêtes. Au lieu d'utiliser la syntaxe `catalog.database.table`, vous pouvez utiliser `database.table`.
+ Utilisez une variété d'outils pour exécuter des requêtes qui font référence aux métastores Hive externes. Vous pouvez utiliser la console Athena, le AWS CLI AWS SDK, Athena et les pilotes JDBC APIs et ODBC Athena mis à jour. Les pilotes mis à jour prennent en charge les catalogues personnalisés.

### Prise en charge de l'API
<a name="connect-to-a-data-source-hive-features-api"></a>

Le connecteur de données Athena pour le métastore Hive externe comprend la prise en charge des opérations d'API d'enregistrement du catalogue et des opérations de l'API de métadonnées.
+ **Enregistrement de catalogue** – Enregistrez les catalogues personnalisés pour les métastores Hive externes et les [sources de données fédérées](federated-queries.md). 
+ **Métadonnées** : utilisez les métadonnées APIs pour fournir des informations de base de données AWS Glue et de table pour tout catalogue que vous enregistrez auprès d'Athena.
+ **Client Athena JAVA SDK** : utilisez l'enregistrement du catalogue APIs, les métadonnées APIs et la prise en charge des catalogues dans le cadre du `StartQueryExecution` fonctionnement du client Athena Java SDK mis à jour.

### Implémentation de référence
<a name="connect-to-a-data-source-hive-features-reference-implementation"></a>

Athena fournit une implémentation de référence pour la fonction Lambda qui se connecte aux métastores Hive externes. L'implémentation de référence est fournie sous GitHub forme de projet open source sur le [metastore Athena Hive](https://github.com/awslabs/aws-athena-hive-metastore).

L'implémentation de référence est disponible sous la forme AWS SAM des deux applications suivantes dans le AWS Serverless Application Repository (SAR). Vous pouvez utiliser l'une de ces applications dans le SAR pour créer vos propres fonctions Lambda.
+ `AthenaHiveMetastoreFunction` – Fichier `.jar` de fonction Lambda uber. Un JAR « uber » (également connu sous le nom de gros JAR ou JAR avec dépendances) est un fichier `.jar` qui contient à la fois un programme Java et ses dépendances dans un seul fichier. 
+ `AthenaHiveMetastoreFunctionWithLayer` – Couche Lambda et fichier `.jar` de fonction Lambda mince.

## Flux de travail
<a name="connect-to-data-source-hive-workflow"></a>

Le diagramme suivant montre comment Athena interagit avec votre métastore Hive externe.

![\[Mode d'interaction d'Athena avec votre métastore Hive externe.\]](http://docs.aws.amazon.com/fr_fr/athena/latest/ug/images/connect-to-data-source-hive-workflow.png)


Dans ce flux de travail, votre métastore Hive connecté à une base de données se trouve à l'intérieur de votre VPC. Vous utilisez Hive Server2 pour gérer votre métastore Hive à l'aide de la CLI Hive.

Le flux de travail permettant d'utiliser des métastores Hive externes depuis Athena inclut les étapes suivantes.

1. Vous créez une fonction Lambda qui connecte Athena au métastore Hive se trouvant à l'intérieur de votre VPC.

1. Vous enregistrez un nom de catalogue unique pour votre métastore Hive et un nom de fonction correspondant dans votre compte.

1. Lorsque vous exécutez une requête DML ou DDL Athena qui utilise le nom du catalogue, le moteur de requête Athena appelle le nom de fonction Lambda que vous avez associé au nom du catalogue.

1. À l'aide de AWS PrivateLink, la fonction Lambda communique avec le métastore Hive externe de votre VPC et reçoit des réponses aux demandes de métadonnées. Athena utilise les métadonnées de votre métastore Hive externe tout comme il utilise les métadonnées du AWS Glue Data Catalog par défaut.

## Considérations et restrictions
<a name="connect-to-a-data-source-hive-considerations"></a>

Lorsque vous utilisez le connecteur de données Athena pour le métastore Hive externe, tenez compte des points suivants :
+ Vous pouvez utiliser l'instruction CTAS pour créer une table sur un métastore Hive externe.
+ Vous pouvez utiliser l'instruction INSERT INTO pour insérer des données dans un métastore Hive externe.
+ La prise en charge DDL pour le métastore Hive externe est limitée aux instructions suivantes.
  + ALTER DATABASE SET DBPROPERTIES
  + ALTER TABLE ADD COLUMNS
  + ALTER TABLE ADD PARTITION
  + ALTER TABLE DROP PARTITION
  + ALTER TABLE RENAME PARTITION
  + ALTER TABLE REPLACE COLUMNS
  + ALTER TABLE SET LOCATION
  + ALTER TABLE SET TBLPROPERTIES
  + CREATE DATABASE
  + CREATE TABLE
  + CREATE TABLE AS
  + DESCRIBE TABLE
  + DROP DATABASE
  + DROP TABLE
  + SHOW COLUMNS
  + SHOW CREATE TABLE
  + SHOW PARTITIONS
  + SHOW SCHEMAS
  + SHOW TABLES
  + SHOW TBLPROPERTIES
+ Le nombre maximal de catalogues enregistrés que vous pouvez avoir est de 1 000.
+ L'authentification Kerberos pour le métastore Hive n'est pas prise en charge.
+ Pour utiliser le pilote JDBC avec un metastore Hive externe ou des [requêtes fédérées](federated-queries.md), incluez `MetadataRetrievalMethod=ProxyAPI` dans votre chaîne de connexion JDBC. Pour plus d'informations sur le pilote JDBC, voir [Connexion à Amazon Athena avec JDBC](connect-with-jdbc.md).
+ Les colonnes cachées `$path`, `$bucket`, `$file_size`, `$file_modified_time`, `$partition`, `$row_id` de Hive ne peuvent pas être utilisées pour le filtrage du contrôle d'accès précis. 
+ Les tables cachées du système Hive comme `example_table$partitions` ou `example_table$properties` ne sont pas prises en charge par le contrôle d'accès précis.

### Permissions
<a name="connect-to-a-data-source-hive-considerations-permissions"></a>

Les connecteurs de données prédéfinis et personnalisés peuvent nécessiter l'accès aux ressources suivantes pour fonctionner correctement. Vérifiez les informations relatives au connecteur que vous utilisez pour vous assurer que vous avez correctement configuré votre VPC. Pour de plus amples informations sur les autorisations IAM requises pour exécuter des requêtes et créer un connecteur de source de données dans Athena, voir [Autorisation de l’accès à un connecteur de données Athena pour un metastore Hive externe](hive-metastore-iam-access.md) et [Autorisation d'accès des fonctions Lambda aux métastores Hive externes](hive-metastore-iam-access-lambda.md).
+ **Simple Storage Service (Amazon S3)** – Outre l'écriture des résultats des requêtes dans l'emplacement des résultats des requêtes Athena dans Simple Storage Service (Amazon S3), les connecteurs de données écrivent également dans un compartiment de déversement dans Simple Storage Service (Amazon S3). Une connectivité et des autorisations d'accès à cet emplacement Simple Storage Service (Amazon S3) sont requises. Pour plus d'informations, consultez [Emplacement de déversement dans Simple Storage Service (Amazon S3)](#connect-to-data-source-hive-spill-location) plus loin dans cette rubrique.
+ **Athena** – L'accès est nécessaire pour vérifier l'état de la requête et empêcher le surbalayage.
+ **AWS Glue**— L'accès est requis si votre connecteur utilise AWS Glue des métadonnées supplémentaires ou principales.
+ **AWS Key Management Service**
+ **Politiques** — Hive Metastore, Athena Query Federation et UDFs requière des politiques en plus des. [AWS politique gérée : AmazonAthenaFullAccess](security-iam-awsmanpol.md#amazonathenafullaccess-managed-policy) Pour de plus amples informations, veuillez consulter [Gestion des identités et des accès dans Athena](security-iam-athena.md).

### Emplacement de déversement dans Simple Storage Service (Amazon S3)
<a name="connect-to-data-source-hive-spill-location"></a>

En raison de la [limite](https://docs.aws.amazon.com/lambda/latest/dg/limits.html) de la taille des réponses des fonctions Lambda, les réponses supérieures au seuil sont déversées dans un emplacement Simple Storage Service (Amazon S3) que vous spécifiez lorsque vous créez votre fonction Lambda. Athena lit directement ces réponses de Simple Storage Service (Amazon S3). 

**Note**  
Athena ne supprime pas les fichiers de réponse sur Simple Storage Service (Amazon S3). Nous vous recommandons de configurer une politique de rétention pour supprimer automatiquement les fichiers de réponse. 

# Connexion d’Athena à un metastore Apache Hive
<a name="connect-to-data-source-hive-connecting-athena-to-an-apache-hive-metastore"></a>

Pour connecter Athena à un métastore Apache Hive, vous devez créer et configurer une fonction Lambda. Pour une implémentation de base, vous pouvez effectuer toutes les étapes requises à partir de la console de gestion Athena.

**Note**  
La procédure suivante nécessite que vous ayez l'autorisation de créer un rôle IAM personnalisé pour la fonction Lambda. Si vous n'êtes pas autorisé à créer un rôle personnalisé, vous pouvez utiliser l'[implémentation de référence](connect-to-data-source-hive.md#connect-to-a-data-source-hive-features-reference-implementation) Athena pour créer une fonction Lambda séparément, puis utiliser la AWS Lambda console pour choisir un rôle IAM existant pour la fonction. Pour de plus amples informations, veuillez consulter [Connexion d’Athena à un métastore Hive à l’aide d’un rôle d’exécution IAM existant](connect-data-source-hive-existing-iam-role.md).

**Connexion d'Athena à un métastore Hive**

1. Ouvrez la console à l'adresse [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Si le panneau de navigation de la console n'est pas visible, choisissez le menu d'extension sur la gauche.  
![\[Choisissez le menu d'expansion.\]](http://docs.aws.amazon.com/fr_fr/athena/latest/ug/images/nav-pane-expansion.png)

1. Sélectionnez **Sources de données et catalogues**.

1. Dans le coin supérieur droit de la console, choisissez **Create data source** (Créer une source de données).

1. Sur la page **Choose a data sources** (Choisir une sources de données), pour **Data source** (Source de données), choisissez **S3 - Apache Hive metastore** (S3 - Métastore Apache Hive).

1. Choisissez **Suivant**.

1. Dans la section **Data source details** (Détails sur la source de données), pour **Data source name** (Nom de la source de données), saisissez le nom que vous souhaitez utiliser dans vos instructions SQL lorsque vous interrogez la source de données à partir d'Athena. Le nom peut contenir jusqu'à 127 caractères et doit être unique dans votre compte. Il ne peut pas être modifié après sa création. Les caractères valides sont a-z, A-Z, 0–9, \$1 (trait de soulignement), @ (arobase) et - (trait d'union). Les noms `awsdatacatalog`, `hive`, `jmx` et `system` sont réservés par Athena et ne peuvent pas être utilisés pour les noms de source de données. 

1. Pour la **fonction Lambda**, choisissez Create **Lambda function**, puis Create **a new** Lambda function dans AWS Lambda

   La **AthenaHiveMetastoreFunction**page s'ouvre dans la AWS Lambda console. La page contient des informations détaillées sur le connecteur.  
![\[La AthenaHiveMetastoreFunctionpage de la AWS Lambda console.\]](http://docs.aws.amazon.com/fr_fr/athena/latest/ug/images/connect-to-data-source-hive-4.png)

1. Sous **Application settings** (Paramètres de l'application), saisissez les paramètres de votre fonction Lambda.
   + **LambdaFuncName**— Donnez un nom à la fonction. Par exemple, **myHiveMetastore**.
   + **SpillLocation**— Spécifiez un emplacement Amazon S3 dans ce compte pour stocker les métadonnées dérivées si la taille de réponse de la fonction Lambda dépasse 4 Mo.
   + **HMSUris**— Entrez l'URI de votre hôte de métastore Hive qui utilise le protocole Thrift sur le port 9083. Utilisez la syntaxe `thrift://<host_name>:9083`.
   + **LambdaMemory**— Spécifiez une valeur comprise entre 128 Mo et 3 008 Mo. La fonction Lambda se voit allouer des cycles d'UC proportionnels à la quantité de mémoire que vous configurez. La valeur par défaut est 1024.
   + **LambdaTimeout**— Spécifiez le temps d'exécution d'appel Lambda maximal autorisé en secondes, de 1 à 900 (900 secondes correspondent à 15 minutes). La valeur par défaut est de 300 secondes (5 minutes).
   + **VPCSecurityGroupIds**— Entrez une liste de groupes de sécurité VPC séparés par des virgules IDs pour le métastore Hive.
   + **VPCSubnetIds** — Entrez une liste de IDs sous-réseaux VPC séparés par des virgules pour le métastore Hive.

1. Sélectionnez **I acknowledge that this app creates custom IAM roles** (Je comprends que cette application crée des rôles IAM personnalisés) puis choisissez **Deploy** (Déployer).  
![\[Déploiement de l'application de fonction Lambda à partir de la console AWS Lambda .\]](http://docs.aws.amazon.com/fr_fr/athena/latest/ug/images/connect-to-data-source-hive-4a.png)

   Une fois le déploiement terminé, votre fonction apparaît dans votre liste d'applications Lambda. Maintenant que la fonction de métastore Hive a été déployée sur votre compte, vous pouvez configurer Athena pour l'utiliser.

1. Revenez à la page **Enter data sources details** (Saisir les détails des sources de données) de la console Athena.

1. Dans la section **Lambda function** (fonction Lambda), choisissez l'icône d'actualisation située à côté de la zone de recherche de fonction Lambda. L'actualisation de la liste des fonctions disponibles entraîne l'apparition de la fonction nouvellement créée dans la liste.

1. Choisissez le nom de la fonction que vous venez de créer dans la console Lambda. L'ARN de la fonction Lambda s'affiche.

1. (Facultatif) Pour **Tags** (Identifications), ajoutez des paires clé-valeur à associer à cette source de données. Pour en savoir plus sur les identifications, consultez [Balisage des ressources Athena](tags.md).

1. Choisissez **Suivant**.

1. À la page **Review and create**, vérifiez les détails de la source de données, puis choisissez **Create data source** (Créer une source de données). 

1. La section **Data source details** (Détails de source de données) de la page de votre source de données affiche des informations sur votre nouveau connecteur. 

   Vous pouvez désormais utiliser le **nom de la source de données** que vous avez spécifié pour référencer le métastore Hive dans vos requêtes SQL dans Athena. Dans vos requêtes SQL, utilisez l'exemple de syntaxe suivant, en remplaçant `hms-catalog-1` par le nom de catalogue que vous avez spécifié précédemment.

   ```
   SELECT * FROM hms-catalog-1.CustomerData.customers 
   ```

1. Pour plus d'informations sur l'affichage, la modification ou la suppression des sources de données que vous créez, consultez [Gestion des sources de données](data-sources-managing.md).

# Utilisez le AWS Serverless Application Repository pour déployer un connecteur de source de données Hive
<a name="connect-data-source-sar-hive"></a>

Pour déployer un connecteur de source de données Athena pour Hive, vous pouvez utiliser le [AWS Serverless Application Repository](https://aws.amazon.com/serverless/serverlessrepo/) au lieu de commencer par la console Athena. Utilisez le AWS Serverless Application Repository pour trouver le connecteur que vous souhaitez utiliser, fournir les paramètres requis par le connecteur, puis déployez le connecteur sur votre compte. Ensuite, après avoir déployé le connecteur, vous utilisez la console Athena pour rendre la source de données disponible pour Athena.

**Pour utiliser le AWS Serverless Application Repository pour déployer un connecteur de source de données pour Hive sur votre compte**

1. Connectez-vous au **référentiel d'applications sans serveur AWS Management Console ** et ouvrez-le.

1. Dans le volet de navigation, choisissez **Applications**.

1. Sélectionnez l'option **Show apps that create custom IAM roles or resource policies** (Afficher les applications qui créent des rôles IAM ou des politiques de ressources personnalisés).

1. Dans la zone de recherche, saisissez **Hive**. Les connecteurs qui apparaissent incluent les deux connecteurs suivants :
   + **AthenaHiveMetastoreFunction** – Fichier `.jar` de fonction Lambda uber.
   + **AthenaHiveMetastoreFunctionWithLayer** – Couche Lambda et fichier `.jar` de fonction Lambda mince.

    Les deux applications ont les mêmes fonctionnalités et ne diffèrent que par leur implémentation. Vous pouvez utiliser l'une de ces deux méthodes pour créer une fonction Lambda qui connecte Athena à votre métastore Hive.

1. Choisissez le nom du connecteur que vous souhaitez utiliser. Ce tutoriel utilise **AthenaHiveMetastoreFunction**.  
![\[Choisissez le nom du connecteur de source de données Athena pour Hive.\]](http://docs.aws.amazon.com/fr_fr/athena/latest/ug/images/connect-data-source-sar-hive-1.png)

1. Sous **Application settings** (Paramètres de l'application), saisissez les paramètres de votre fonction Lambda.
   + **LambdaFuncName**— Donnez un nom à la fonction. Par exemple, **myHiveMetastore**.
   + **SpillLocation**— Spécifiez un emplacement Amazon S3 dans ce compte pour stocker les métadonnées dérivées si la taille de réponse de la fonction Lambda dépasse 4 Mo.
   + **HMSUris**— Entrez l'URI de votre hôte de métastore Hive qui utilise le protocole Thrift sur le port 9083. Utilisez la syntaxe `thrift://<host_name>:9083`.
   + **LambdaMemory**— Spécifiez une valeur comprise entre 128 Mo et 3 008 Mo. La fonction Lambda se voit allouer des cycles d'UC proportionnels à la quantité de mémoire que vous configurez. La valeur par défaut est 1024.
   + **LambdaTimeout**— Spécifiez le temps d'exécution d'appel Lambda maximal autorisé en secondes, de 1 à 900 (900 secondes correspondent à 15 minutes). La valeur par défaut est de 300 secondes (5 minutes).
   + **VPCSecurityGroupIds**— Entrez une liste de groupes de sécurité VPC séparés par des virgules IDs pour le métastore Hive.
   + **VPCSubnetIds** — Entrez une liste de IDs sous-réseaux VPC séparés par des virgules pour le métastore Hive.

1. En bas à droite de la page **Application details** (Détails de l'application), sélectionnez **I acknowledge that this app creates custom IAM roles** (Je reconnais que cette application crée des rôles IAM personnalisés), puis choisissez **Deploy** (Déployer).

À ce stade, vous pouvez configurer le service Athena pour qu'il utilise votre fonction Lambda afin de se connecter à votre métastore Hive. Pour les étapes, consultez [Configuration d'Athena pour utiliser un connecteur de métastore Hive déployé](connect-data-source-hive-existing-lambda.md).

# Connexion d’Athena à un métastore Hive à l’aide d’un rôle d’exécution IAM existant
<a name="connect-data-source-hive-existing-iam-role"></a>

Pour connecter votre métastore Hive externe à Athena avec une fonction Lambda qui utilise un rôle IAM existant, vous pouvez utiliser l'implémentation de référence du connecteur Athena pour métastore Hive externe.

Les trois étapes principales sont les suivantes :

1. **[Cloner et créer](#connect-data-source-hive-existing-iam-role-clone-and-build-the-lambda-function)** – Clonez l'implémentation de référence Athena et créez le fichier JAR qui contient le code de la fonction Lambda.

1. **[AWS Lambda console](#connect-data-source-hive-existing-iam-role-aws-lambda-console)** — Dans la AWS Lambda console, créez une fonction Lambda, attribuez-lui un rôle d'exécution IAM existant et téléchargez le code de fonction que vous avez généré.

1. **[Console Amazon Athena](connect-data-source-hive-existing-lambda.md)** – Dans la console Amazon Athena, créez un nom de source de données que vous pourrez utiliser pour faire référence à votre métastore Hive externe dans vos requêtes Athena.

Si vous êtes déjà autorisé à créer un rôle IAM personnalisé, vous pouvez utiliser un flux de travail plus simple qui utilise la console Athena pour créer et AWS Serverless Application Repository configurer une fonction Lambda. Pour de plus amples informations, veuillez consulter [Connexion d’Athena à un metastore Apache Hive](connect-to-data-source-hive-connecting-athena-to-an-apache-hive-metastore.md).

## Conditions préalables
<a name="connect-data-source-hive-existing-iam-role-prerequisites"></a>
+ Git doit être installé sur votre système.
+ Vous devez avoir [Apache Maven](https://maven.apache.org/) installé.
+ Vous avez un rôle d'exécution IAM que vous pouvez attribuer à la fonction Lambda. Pour de plus amples informations, veuillez consulter [Autorisation d'accès des fonctions Lambda aux métastores Hive externes](hive-metastore-iam-access-lambda.md).

## Clonage et création de la fonction Lambda
<a name="connect-data-source-hive-existing-iam-role-clone-and-build-the-lambda-function"></a>

[Le code de fonction pour l'implémentation de référence Athena est un projet Maven situé sur GitHub awslabs/. aws-athena-hive-metastore](https://github.com/awslabs/aws-athena-hive-metastore) Pour des informations détaillées sur le projet, consultez le fichier README correspondant GitHub ou le [Modification du connecteur Athena pour métastore Hive externe](datastores-hive-reference-implementation.md) sujet de cette documentation.

**Clonage et création du code de fonction Lambda**

1. Saisissez la commande suivante pour cloner l'implémentation de référence Athena :

   ```
   git clone https://github.com/awslabs/aws-athena-hive-metastore
   ```

1. Exécutez la commande suivante pour créer le fichier `.jar` pour la fonction Lambda :

   ```
   mvn clean install
   ```

   Une fois le projet crée avec succès, le fichier `.jar` suivant est créé dans le dossier cible de votre projet :

   `hms-lambda-func-1.0-SNAPSHOT-withdep.jar`

   Dans la section suivante, vous allez utiliser la AWS Lambda console pour télécharger ce fichier sur votre compte Amazon Web Services.

## Création et configuration de la fonction Lambda dans la console AWS Lambda
<a name="connect-data-source-hive-existing-iam-role-aws-lambda-console"></a>

Dans cette section, vous allez utiliser la AWS Lambda console pour créer une fonction qui utilise un rôle d'exécution IAM existant. Après avoir configuré un VPC pour la fonction, vous téléchargez le code de la fonction et configurez les variables d'environnement pour la fonction.

### Créer la fonction Lambda
<a name="connect-data-source-hive-existing-iam-role-create-the-lambda-function"></a>

Au cours de cette étape, vous créez une fonction dans la AWS Lambda console qui utilise un rôle IAM existant.

**Création d'une fonction Lambda qui utilise un rôle IAM existant**

1. Connectez-vous à la AWS Lambda console AWS Management Console et ouvrez-la à l'adresse [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/).

1. Dans le volet de navigation, choisissez **Fonctions**.

1. Choisissez **Créer une fonction**.

1. Choisissez **Créer à partir de zéro**.

1. Dans **Function name** (Nom de la fonction), saisissez le nom de votre fonction Lambda (par exemple, **EHMSBasedLambda**).

1. Pour **Runtime** (Exécution), choisissez **Java 8**.

1. Sous **Permissions** (Autorisations), développez **Change default execution role** (Modifier le rôle d'exécution par défaut).

1. Pour **Execution role (Rôle d'exécution)**, choisissez **Use an existing role (Utilisez un rôle existant)**.

1. Pour **Existing role** (Rôle existant), choisissez le rôle d'exécution IAM que votre fonction Lambda utilisera pour Athena (cet exemple utilise un rôle appelé `AthenaLambdaExecutionRole`).

1. Développez **Advanced settings** (Paramètres avancés).

1. Sélectionnez **Enable Network** (Activer le réseau).

1. Pour **VPC**, choisissez le VPC auquel votre fonction aura accès.

1. Pour **Subnets** (Sous-réseaux), choisissez les sous-réseaux VPC que Lambda doit utiliser.

1. Pour **Security groups** (Groupe de sécurité), choisissez les groupes de sécurité VPC à utiliser pour Lambda.

1. Sélectionnez **Create function** (Créer une fonction). La AWS Lambda console ouvre la page de configuration de votre fonction et commence à créer votre fonction.

### Chargement du code et configuration de la fonction Lambda
<a name="connect-data-source-hive-existing-iam-role-upload-and-configure"></a>

Lorsque la console vous informe que votre fonction a été créée avec succès, vous pouvez télécharger le code de la fonction et configurer ses variables d'environnement.

**Téléchargement du code de votre fonction Lambda et configuration de ses variables d'environnement**

1. Dans la console Lambda, assurez-vous que vous êtes sur l'onglet **Code** de la page de la fonction que vous avez spécifiée.

1. Pour **Code source** (Code source), choisissez **Upload from** (Charger depuis) puis choisissez **.zip or .jar file** (fichier .zip ou .jar).

1. Téléchargement du fichier `hms-lambda-func-1.0-SNAPSHOT-withdep.jar` généré précédemment.

1. Sur la page de la fonction Lambda, choisissez l'onglet **Configuration**.

1. Dans le panneau de gauche, choisissez **Environment variables** (Variables d'environnement).

1. Dans la section **Environment variables** (Variables d'environnement), choisissez **Edit** (Modifier).  
![\[Choisissez Edit (Modifier) pour modifier les variables d'environnement de la fonction Lambda.\]](http://docs.aws.amazon.com/fr_fr/athena/latest/ug/images/connect-data-source-hive-existing-iam-role-5.png)

1. Sur la page **Edit environment variables** (Modifier les variables d'environnement), utilisez l'option **Add environment variable** (Ajouter une variable d'environnement) pour ajouter les clés et les valeurs des variables d'environnement suivantes :
   + **HMS\$1URIS** – Utilisez la syntaxe suivante pour saisir l'URI de votre hôte de métastore Hive qui utilise le protocole Thrift au port 9083.

     ```
     thrift://<host_name>:9083
     ```
   + **SPILL\$1LOCATION** – Spécifiez un emplacement Amazon S3 dans votre compte Amazon Web Services pour contenir les métadonnées de débordement si la taille de la réponse de la fonction Lambda dépasse 4 Mo.  
![\[Spécification des valeurs pour les variables d'environnement de la fonction Lambda.\]](http://docs.aws.amazon.com/fr_fr/athena/latest/ug/images/connect-data-source-hive-existing-iam-role-6.png)

1. Choisissez **Enregistrer**.

À ce stade, vous êtes prêt à configurer Athena pour qu'il utilise votre fonction Lambda afin de se connecter à votre métastore Hive. Pour les étapes, consultez [Configuration d'Athena pour utiliser un connecteur de métastore Hive déployé](connect-data-source-hive-existing-lambda.md).

# Configuration d'Athena pour utiliser un connecteur de métastore Hive déployé
<a name="connect-data-source-hive-existing-lambda"></a>

Une fois que vous avez déployé un connecteur de source de données Lambda comme `AthenaHiveMetastoreFunction` sur votre compte, vous pouvez configurer Athena pour l'utiliser. Pour ce faire, créez un nom de source de données qui fait référence à votre métastore Hive externe à utiliser dans vos requêtes Athena.

**Connexion d'Athena à votre métastore Hive à l'aide d'une fonction Lambda existante**

1. Ouvrez la console à l'adresse [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Si le panneau de navigation de la console n'est pas visible, choisissez le menu d'extension sur la gauche.  
![\[Choisissez le menu d'expansion.\]](http://docs.aws.amazon.com/fr_fr/athena/latest/ug/images/nav-pane-expansion.png)

1. Sélectionnez **Sources de données et catalogues**.

1. Sur la page **Sources de données et catalogues**, sélectionnez **Créer une source de données**.

1. Sur la page **Choose a data sources** (Choisir une sources de données), pour **Data source** (Source de données), choisissez **S3 - Apache Hive metastore** (S3 - Métastore Apache Hive).

1. Choisissez **Suivant**.

1. Dans la section **Data source details** (Détails sur la source de données), pour **Data source name** (Nom de la source de données), saisissez le nom que vous souhaitez utiliser dans vos instructions SQL lorsque vous interrogez la source de données à partir d'Athena (par exemple, `MyHiveMetastore`). Le nom peut contenir jusqu'à 127 caractères et doit être unique dans votre compte. Il ne peut pas être modifié après sa création. Les caractères valides sont a-z, A-Z, 0–9, \$1 (trait de soulignement), @ (arobase) et - (trait d'union). Les noms `awsdatacatalog`, `hive`, `jmx` et `system` sont réservés par Athena et ne peuvent pas être utilisés pour les noms de source de données. 

1. Dans la section **Connection details** (Détails de connexion), utilisez la zone **Select or enter a Lambda function** (Sélectionner ou saisir une fonction Lambda) pour choisir le nom de la fonction que vous venez de créer. L'ARN de la fonction Lambda s'affiche.

1. (Facultatif) Pour **Tags** (Identifications), ajoutez des paires clé-valeur à associer à cette source de données. Pour en savoir plus sur les identifications, consultez [Balisage des ressources Athena](tags.md).

1. Choisissez **Suivant**.

1. À la page **Review and create**, vérifiez les détails de la source de données, puis choisissez **Create data source** (Créer une source de données). 

1. La section **Data source details** (Détails de source de données) de la page de votre source de données affiche des informations sur votre nouveau connecteur.

   Vous pouvez désormais utiliser le **nom de la source de données** que vous avez spécifié pour référencer le métastore Hive dans vos requêtes SQL dans Athena.

   Dans vos requêtes SQL, utilisez l'exemple de syntaxe suivant, en remplaçant `ehms-catalog` par le nom de la source de données que vous avez spécifié précédemment.

   ```
   SELECT * FROM ehms-catalog.CustomerData.customers 
   ```

1. Pour afficher, modifier ou supprimer les sources de données que vous créez, veuillez consulter [Gestion des sources de données](data-sources-managing.md).

# Omission du nom du catalogue dans des requêtes de métastore Hive externe
<a name="datastores-hive-default-catalog"></a>

Lorsque vous exécutez des requêtes DML et DDL sur des métastores Hive externes, vous pouvez simplifier la syntaxe de la requête en omettant le nom du catalogue si ce nom est sélectionné dans l'éditeur de requête. Certaines restrictions s'appliquent à cette fonctionnalité.

## Instructions DML
<a name="datastores-hive-default-catalog-dml-statements"></a>

**Pour exécuter des requêtes avec des catalogues enregistrés**

1. Vous pouvez placer le nom de la source de données avant la base de données en utilisant la syntaxe `[[data_source_name].database_name].table_name`, comme dans l'exemple suivant.

   ```
   select * from  "hms-catalog-1".hms_tpch.customer limit 10;
   ```

1. Lorsque la source de données que vous souhaitez utiliser est déjà sélectionnée dans l'éditeur de requêtes, vous pouvez omettre le nom dans la requête, comme dans l'exemple suivant.

   ```
   select * from hms_tpch.customer limit 10:
   ```  
![\[Requête DML utilisant une source de données par défaut.\]](http://docs.aws.amazon.com/fr_fr/athena/latest/ug/images/datastores-hive-default-catalog-2.png)

1. Lorsque vous utilisez plusieurs sources de données dans une requête, vous pouvez omettre uniquement le nom de la source de données par défaut et devez spécifier le nom complet de toutes les autres sources de données qui ne sont pas des sources de données par défaut. 

   Supposons par exemple que `AwsDataCatalog` est sélectionnée comme source de données par défaut dans l'éditeur de requêtes. L'`FROM`instruction contenue dans l'extrait de requête suivant qualifie entièrement les deux premiers noms de source de données, mais omet le nom de la troisième source de données car elle figure dans le catalogue de AWS Glue données.

   ```
   ...
   FROM ehms01.hms_tpch.customer,
            "hms-catalog-1".hms_tpch.orders,
            hms_tpch.lineitem
   ...
   ```

## Instructions DDL
<a name="datastores-hive-default-catalog-ddl-statements"></a>

Les instructions DDL Athena suivantes prennent en charge les préfixes de nom de catalogue. Les préfixes de nom de catalogue dans d'autres instructions DDL provoquent des erreurs de syntaxe.

```
SHOW TABLES [IN [catalog_name.]database_name] ['regular_expression']

SHOW TBLPROPERTIES [[catalog_name.]database_name.]table_name [('property_name')]

SHOW COLUMNS IN [[catalog_name.]database_name.]table_name

SHOW PARTITIONS [[catalog_name.]database_name.]table_name

SHOW CREATE TABLE [[catalog_name.][database_name.]table_name

DESCRIBE [EXTENDED | FORMATTED] [[catalog_name.][database_name.]table_name [PARTITION partition_spec] [col_name ( [.field_name] | [.'$elem$'] | [.'$key$'] | [.'$value$'] )]
```

Comme pour les instructions DML, vous pouvez omettre la source de données et les préfixes de base de données de la requête lorsque la source de données et la base de données sont sélectionnées dans l'éditeur de requêtes.

Dans l'image suivante, la source de données `hms-catalog-1` et la base de données `hms_tpch` sont sélectionnées dans l'éditeur de requêtes. L'instruction `show create table customer` réussit, même si le préfixe `hms-catalog-1` et le nom de base de données `hms_tpch` sont omis de la requête elle-même.

![\[Une instruction DDL utilisant le catalogue par défaut.\]](http://docs.aws.amazon.com/fr_fr/athena/latest/ug/images/datastores-hive-default-catalog-4.png)


## Spécification d'une source de données par défaut dans une chaîne de connexion JDBC
<a name="datastores-hive-default-catalog-jdbc"></a>

Lorsque vous utilisez le pilote JDBC Athena pour connecter Athena à un métastore Hive externe, vous pouvez utiliser le paramètre `Catalog` pour spécifier le nom de la source de données par défaut dans votre chaîne de connexion dans un éditeur SQL tel que [SQL Workbench](https://www.sql-workbench.eu/index.html).

**Note**  
Pour télécharger les pilotes les plus récents d'Athena JDBC, consultez [Utilisation d'Athena avec le pilote JDBC](https://docs.aws.amazon.com/athena/latest/ug/connect-with-jdbc.html).

La chaîne de connexion suivante indique la source de données par défaut*hms-catalog-name*.

```
    jdbc:awsathena://AwsRegion=us-east-1;S3OutputLocation=s3://amzn-s3-demo-bucket/lambda/results/;Workgroup=AmazonAthenaPreviewFunctionality;Catalog=hms-catalog-name;
```

L'image suivante illustre un URL de connexion JDBC configuré dans SQL Workbench.

![\[Configurer une URL de connexion JDBC dans SQL Workbench.\]](http://docs.aws.amazon.com/fr_fr/athena/latest/ug/images/datastores-hive-default-catalog-jdbc-1.jpg)


# Utilisation des vues Hive
<a name="hive-views"></a>

Vous pouvez utiliser Athena pour interroger les vues existantes dans vos métastores Hive externes. Athena traduit vos vues pour vous on-the-fly lors de l'exécution sans modifier la vue d'origine ni enregistrer la traduction.

Par exemple, supposons que vous disposez d'une vue Hive comme la suivante qui utilise une syntaxe non prise en charge par Athena comme `LATERAL VIEW explode()` :

```
CREATE VIEW team_view AS 
SELECT team, score 
FROM matches 
LATERAL VIEW explode(scores) m AS score
```

Athena traduit la chaîne de requête de la vue Hive en une instruction semblable à la suivante qu'Athena peut exécuter :

```
SELECT team, score
FROM matches
CROSS JOIN UNNEST(scores) AS m (score)
```

Pour plus d'informations sur la connexion d'un métastore Hive externe à Athena, consultez [Utilisation d’un metastore Hive externe](connect-to-data-source-hive.md).

## Considérations et restrictions
<a name="hive-views-considerations-and-limitations"></a>

Lorsque vous interrogez les vues Hive d'Athena, tenez compte des points suivants :
+ Athena ne prend pas en charge la création de vues Hive. Vous pouvez créer des vues Hive dans votre métastore Hive externe, que vous pouvez ensuite interroger depuis Athena.
+ Athena ne prend pas en charge les vues personnalisées UDFs pour Hive.
+ En raison d'un problème connu dans la console Athena, les vues Hive apparaissent sous la liste des tables au lieu de la liste des vues.
+ Bien que le processus de traduction soit automatique, certaines fonctions Hive ne sont pas prises en charge pour les vues Hive ou nécessitent un traitement spécial. Pour plus d'informations, consultez la section suivante.

## Limitations du support de la fonction Hive
<a name="hive-views-function-limitations"></a>

Cette section met en évidence les fonctions Hive qu'Athena ne prend pas en charge pour les vues Hive ou qui nécessitent un traitement spécial. Actuellement, étant donné qu'Athena prend principalement en charge les fonctions de Hive 2.2.0, les fonctions disponibles uniquement dans les versions supérieures (telles que Hive 4.0.0) ne sont pas disponibles. Pour obtenir la liste complète des fonctions Hive, consultez les [fonctions définies par l'utilisateur LanguageManual Hive](https://cwiki.apache.org/confluence/display/hive/languagemanual+udf).

### Fonctions d’agrégation
<a name="hive-views-aggregate-functions"></a>

#### Fonctions d'agrégation qui nécessitent un traitement spécial
<a name="hive-views-aggregate-functions-special-handling"></a>

La fonction d'agrégation suivante pour les vues Hive nécessite un traitement spécial.
+ **Avg**– Au lieu de `avg(INT i)`, utilisez `avg(CAST(i AS DOUBLE))`.

#### Fonctions d'agrégation non prises en charge
<a name="hive-views-aggregate-functions-not-supported"></a>

Les fonctions d'agrégation Hive suivantes ne sont pas prises en charge dans les vues Athena pour Hive.

```
covar_pop
histogram_numeric
ntile
percentile
percentile_approx
```

Les fonctions de régression telles que `regr_count`, `regr_r2`, et `regr_sxx` ne sont pas prises en charge dans les vues Athena pour Hive.

### Fonctions de date non prises en charge
<a name="hive-views-date-functions-not-supported"></a>

Les fonctions de date Hive suivantes ne sont pas prises en charge dans les vues Athena pour Hive.

```
date_format(date/timestamp/string ts, string fmt)
day(string date)
dayofmonth(date)
extract(field FROM source)
hour(string date)
minute(string date)
month(string date)
quarter(date/timestamp/string)
second(string date)
weekofyear(string date)
year(string date)
```

### Fonctions de masquage non prises en charge
<a name="hive-views-masking-functions-not-supported"></a>

Les fonctions de masquage Hive telles que `mask()` et `mask_first_n()` ne sont pas pris en charge dans les vues Athena pour Hive.

### Fonctions diverses
<a name="hive-views-miscellaneous-functions"></a>

#### Fonctions diverses qui nécessitent un traitement spécial
<a name="hive-views-supported-miscellaneous-functions-special-handling"></a>

Les fonctions diverses suivantes pour les vues Hive nécessitent un traitement spécial.
+ **md5** – Athena prend en charge `md5(binary)`, mais pas `md5(varchar)`.
+ **Explose** – Athena prend en charge `explode` lorsqu'il est utilisé dans la syntaxe suivante :

  ```
  LATERAL VIEW [OUTER] EXPLODE(<argument>)
  ```
+ **Posexplose** – Athena prend en charge `posexplode` lorsqu'il est utilisé dans la syntaxe suivante :

  ```
  LATERAL VIEW [OUTER] POSEXPLODE(<argument>)           
  ```

  Dans la sortie `(pos, val)`, Athena traite la colonne `pos` comme `BIGINT`. Pour cette raison, vous devrez peut-être convertir la colonne `pos` en `BIGINT` pour éviter une vue obsolète. L'exemple suivant illustre cette technique.

  ```
  SELECT CAST(c AS BIGINT) AS c_bigint, d 
  FROM table LATERAL VIEW POSEXPLODE(<argument>) t AS c, d
  ```

#### Fonctions diverses non prises en charge
<a name="hive-views-unsupported-miscellaneous-functions-not-supported"></a>

Les fonctions Hive suivantes ne sont pas prises en charge dans les vues Athena pour Hive.

```
aes_decrypt
aes_encrypt
current_database
current_user
inline
java_method
logged_in_user
reflect
sha/sha1/sha2
stack
version
```

### Opérateurs
<a name="hive-views-operators"></a>

#### Opérateurs nécessitant un traitement spécial
<a name="hive-views-operators-special-handling"></a>

Les opérateurs suivants pour les vues Hive nécessitent un traitement spécial.
+ **Opérateur Mod (%)** – Parce que le type `DOUBLE` convertit implicitement en `DECIMAL(x,y)`, la syntaxe suivante peut entraîner un message d'erreur View is stale (La vue est obsolète) :

  ```
  a_double % 1.0 AS column
  ```

  Pour résoudre ce problème, utilisez `CAST`, comme dans l'exemple suivant.

  ```
  CAST(a_double % 1.0 as DOUBLE) AS column
  ```
+ **Opérateur de division (/)** – Dans Hive, `int` divisé par `int` produit un `double`. Dans Athena, la même opération produit un `int` tronqué.

#### Opérateurs non pris en charge
<a name="hive-views-operators-not-supported"></a>

Athena ne prend pas en charge les opérateurs suivants pour les vues Hive.

**\$1A** – au niveau du bit `NOT`

**A ^ b** – au niveau du bit `XOR`

**A & b** – au niveau du bit `AND`

**A \$1 b** – au niveau du bit `OR`

**A <=> b** – renvoie le même résultat que l'opérateur égal (`=`) pour opérandes non nuls. Renvoie `TRUE` si les deux sont `NULL`, `FALSE` si l'un d'eux est `NULL`.

### Fonctions de chaîne
<a name="hive-views-string-functions"></a>

#### Fonctions de chaîne qui nécessitent un traitement spécial
<a name="hive-views-string-functions-special-handling"></a>

Les fonctions de chaîne Hive suivantes pour les vues Hive nécessitent un traitement spécial.
+ **chr(bigint\$1double a)** – Hive autorise des arguments négatifs ; pas Athena.
+ **instr(string str, string substr)** – Parce que le mappage d'Athena pour la fonction `instr` renvoie `BIGINT` et non `INT`, utilisez la syntaxe suivante :

  ```
  CAST(instr(string str, string substr) as INT)         
  ```

  Sans cette étape, la vue sera considérée comme obsolète.
+ **length(string a)** – Parce que le mappage d'Athena pour la fonction `length` renvoie `BIGINT` et non `INT`, utilisez la syntaxe suivante pour que la vue ne soit pas considérée comme obsolète :

  ```
  CAST(length(string str) as INT)
  ```

#### Fonctions de chaîne non prises en charge
<a name="hive-views-string-functions-not-supported"></a>

Les fonctions de chaîne Hive suivantes ne sont pas prises en charge dans les vues Athena pour Hive.

```
ascii(string str)
character_length(string str)
decode(binary bin, string charset)
encode(string src, string charset)
elt(N int,str1 string,str2 string,str3 string,...)
field(val T,val1 T,val2 T,val3 T,...)
find_in_set(string str, string strList)
initcap(string A)
levenshtein(string A, string B)
locate(string substr, string str[, int pos])
octet_length(string str)
parse_url(string urlString, string partToExtract [, string keyToExtract])
printf(String format, Obj... args)
quote(String text)
regexp_extract(string subject, string pattern, int index)
repeat(string str, int n)
sentences(string str, string lang, string locale)
soundex(string A)
space(int n)
str_to_map(text[, delimiter1, delimiter2])
substring_index(string A, string delim, int count)
```

### XPath fonctions non prises en charge
<a name="hive-views-xpath-functions-not-supported"></a>

Les XPath fonctions Hive sont similaires à `xpath``xpath_short`, et ne `xpath_int` sont pas prises en charge dans les vues Athena for Hive.

## Résolution des problèmes
<a name="hive-views-troubleshooting"></a>

Lorsque vous utilisez les vues Hive dans Athena, vous pouvez rencontrer les problèmes suivants :
+ ***<view name>*La vue est périmée** — Ce message indique généralement une incompatibilité de type entre la vue dans Hive et Athena. Si la même fonction présente dans la documentation des [fonctions et opérateurs [Hive LanguageManual UDF](https://cwiki.apache.org/confluence/display/hive/languagemanual+udf) et Presto](https://prestodb.io/docs/current/functions.html) possède des signatures différentes, essayez de convertir le type de données incompatible.
+ **Fonction non enregistrée** – Athena ne prend pas actuellement en charge cette fonction. Pour obtenir des détails, consultez les informations plus haut dans ce document.

# Utilisez les AWS CLI métastores with Hive
<a name="datastores-hive-cli"></a>

Vous pouvez utiliser les commandes CLI `aws athena` pour gérer les catalogues de données de métastore Hive que vous utilisez avec Athena. Une fois que vous avez défini un ou plusieurs catalogues à utiliser avec Athena, vous pouvez les référencer dans vos commandes DDL et DML `aws athena`.

## Utilisation du AWS CLI pour gérer les catalogues de métastores Hive
<a name="datastores-hive-cli-manage-hive-catalogs"></a>

### Enregistrement d'un catalogue : Create-data-catalog
<a name="datastores-hive-cli-registering-a-catalog"></a>

Pour enregistrer un catalogue de données, utilisez la commande `create-data-catalog`. Utilisez le paramètre `name` pour spécifier le nom que vous souhaitez utiliser pour le catalogue. Passage de l'ARN de la fonction Lambda à l'option `metadata-function` de l'argument `parameters`. Pour créer des identifications pour le nouveau catalogue, utilisez le paramètre `tags` avec une ou plusieurs paires d'arguments `Key=key,Value=value` séparées par des espaces.

L'exemple suivant enregistre le catalogue de métastore Hive nommé `hms-catalog-1`. La commande a été formatée pour être lisible.

```
$ aws athena create-data-catalog 
 --name "hms-catalog-1" 
 --type "HIVE"
 --description "Hive Catalog 1"
 --parameters "metadata-function=arn:aws:lambda:us-east-1:111122223333:function:external-hms-service-v3,sdk-version=1.0" 
 --tags Key=MyKey,Value=MyValue
 --region us-east-1
```

### Afficher les détails du catalogue : Get-data-catalog
<a name="datastores-hive-cli-showing-details-of-a-catalog"></a>

Pour afficher les détails d'un catalogue, passez le nom du catalogue à la commande `get-data-catalog`, comme dans l'exemple suivant.

```
$ aws athena get-data-catalog --name "hms-catalog-1" --region us-east-1
```

L'exemple de résultat suivant est au format JSON.

```
{
    "DataCatalog": {
        "Name": "hms-catalog-1",
        "Description": "Hive Catalog 1",
        "Type": "HIVE",
        "Parameters": {
            "metadata-function": "arn:aws:lambda:us-east-1:111122223333:function:external-hms-service-v3",
            "sdk-version": "1.0"
        }
    }
}
```

### Liste des catalogues enregistrés : List-data-catalogs
<a name="datastores-hive-cli-listing-registered-catalogs"></a>

Pour répertorier les catalogues enregistrés, utilisez la commande `list-data-catalogs` et spécifiez éventuellement une région, comme dans l'exemple suivant. Les catalogues répertoriés incluent toujours AWS Glue.

```
$ aws athena list-data-catalogs --region us-east-1
```

L'exemple de résultat suivant est au format JSON.

```
{
    "DataCatalogs": [
        {
            "CatalogName": "AwsDataCatalog",
            "Type": "GLUE"
        },
        {
            "CatalogName": "hms-catalog-1",
            "Type": "HIVE",
            "Parameters": {
                "metadata-function": "arn:aws:lambda:us-east-1:111122223333:function:external-hms-service-v3",
                "sdk-version": "1.0"
            }
        }
    ]
}
```

### Mettre à jour un catalogue : Update-data-catalog
<a name="datastores-hive-cli-updating-a-catalog"></a>

Pour mettre à jour un catalogue de données, utilisez la commande `update-data-catalog`, comme dans l'exemple suivant. La commande a été formatée pour être lisible.

```
$ aws athena update-data-catalog 
 --name "hms-catalog-1" 
 --type "HIVE"
 --description "My New Hive Catalog Description" 
 --parameters "metadata-function=arn:aws:lambda:us-east-1:111122223333:function:external-hms-service-new,sdk-version=1.0" 
 --region us-east-1
```

### Supprimer un catalogue : Delete-data-catalog
<a name="datastores-hive-cli-deleting-a-catalog"></a>

Pour supprimer un catalogue de données, utilisez la commande `delete-data-catalog`, comme dans l'exemple suivant.

```
$ aws athena delete-data-catalog --name "hms-catalog-1" --region us-east-1
```

### Afficher les détails de la base de données : Get-database
<a name="datastores-hive-cli-showing-details-of-a-database"></a>

Pour afficher les détails d'une base de données, passez le nom du catalogue et de la base de données à la commande `get-database`, comme dans l'exemple suivant.

```
$ aws athena get-database --catalog-name hms-catalog-1 --database-name mydb
```

L'exemple de résultat suivant est au format JSON.

```
{
    "Database": {
        "Name": "mydb",
        "Description": "My database",
        "Parameters": {
            "CreatedBy": "Athena",
            "EXTERNAL": "TRUE"
        }
    }
}
```

### Liste des bases de données dans un catalogue : List-databases
<a name="datastores-hive-cli-listing-databases"></a>

Pour répertorier les bases de données dans un catalogue, utilisez la commande `list-databases` et spécifiez éventuellement une région, comme dans l'exemple suivant.

```
$ aws athena list-databases --catalog-name AwsDataCatalog --region us-west-2
```

L'exemple de résultat suivant est au format JSON.

```
{
    "DatabaseList": [
        {
            "Name": "default"
        },
        {
            "Name": "mycrawlerdatabase"
        },
        {
            "Name": "mydatabase"
        },
        {
            "Name": "sampledb",
            "Description": "Sample database",
            "Parameters": {
                "CreatedBy": "Athena",
                "EXTERNAL": "TRUE"
            }
        },
        {
            "Name": "tpch100"
        }
    ]
}
```

### Affichage des détails du tableau : Get-table-metadata
<a name="datastores-hive-cli-showing-details-of-a-table"></a>

Pour afficher les métadonnées d'une table, y compris les noms de colonnes et les types de données, transmettez le nom du catalogue, de la base de données et de la table à la commande `get-table-metadata`, comme dans l'exemple suivant.

```
$ aws athena get-table-metadata --catalog-name AwsDataCatalog --database-name mydb --table-name cityuseragent
```

L'exemple de résultat suivant est au format JSON.

```
{
    "TableMetadata": {
        "Name": "cityuseragent",
            "CreateTime": 1586451276.0,
            "LastAccessTime": 0.0,
            "TableType": "EXTERNAL_TABLE",
            "Columns": [
                {
                    "Name": "city",
                    "Type": "string"
                },
                {
                    "Name": "useragent1",
                    "Type": "string"
                }
            ],
            "PartitionKeys": [],
            "Parameters": {
                "COLUMN_STATS_ACCURATE": "false",
                "EXTERNAL": "TRUE",
                "inputformat": "org.apache.hadoop.mapred.TextInputFormat",
                "last_modified_by": "hadoop",
                "last_modified_time": "1586454879",
                "location": "s3://amzn-s3-demo-bucket/",
                "numFiles": "1",
                "numRows": "-1",
                "outputformat": "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat",
                "rawDataSize": "-1",
                "serde.param.serialization.format": "1",
                "serde.serialization.lib": "org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe",
                "totalSize": "61"
            }
        }
}
```

### Affichage des métadonnées pour toutes les tables d'une base de données : List-table-metadata
<a name="datastores-hive-cli-showing-all-table-metadata"></a>

Pour afficher les métadonnées de toutes les tables d'une base de données, transmettez le nom du catalogue et celui de la base de données à la commande `list-table-metadata`. La commande `list-table-metadata` est similaire à la commande `get-table-metadata`, sauf que vous ne spécifiez pas de nom de table. Pour limiter le nombre de résultats, vous pouvez utiliser l'option `--max-results`, comme dans l'exemple suivant. 

```
$ aws athena list-table-metadata --catalog-name AwsDataCatalog --database-name sampledb --region us-east-1 --max-results 2
```

L'exemple de résultat suivant est au format JSON.

```
{
    "TableMetadataList": [
        {
            "Name": "cityuseragent",
            "CreateTime": 1586451276.0,
            "LastAccessTime": 0.0,
            "TableType": "EXTERNAL_TABLE",
            "Columns": [
                {
                    "Name": "city",
                    "Type": "string"
                },
                {
                    "Name": "useragent1",
                    "Type": "string"
                }
            ],
            "PartitionKeys": [],
            "Parameters": {
                "COLUMN_STATS_ACCURATE": "false",
                "EXTERNAL": "TRUE",
                "inputformat": "org.apache.hadoop.mapred.TextInputFormat",
                "last_modified_by": "hadoop",
                "last_modified_time": "1586454879",
                "location": "s3://amzn-s3-demo-bucket/",
                "numFiles": "1",
                "numRows": "-1",
                "outputformat": "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat",
                "rawDataSize": "-1",
                "serde.param.serialization.format": "1",
                "serde.serialization.lib": "org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe",
                "totalSize": "61"
            }
        },
        {
            "Name": "clearinghouse_data",
            "CreateTime": 1589255544.0,
            "LastAccessTime": 0.0,
            "TableType": "EXTERNAL_TABLE",
            "Columns": [
                {
                    "Name": "location",
                    "Type": "string"
                },
                {
                    "Name": "stock_count",
                    "Type": "int"
                },
                {
                    "Name": "quantity_shipped",
                    "Type": "int"
                }
            ],
            "PartitionKeys": [],
            "Parameters": {
                "EXTERNAL": "TRUE",
                "inputformat": "org.apache.hadoop.mapred.TextInputFormat",
                "location": "s3://amzn-s3-demo-bucket/",
                "outputformat": "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat",
                "serde.param.serialization.format": "1",
                "serde.serialization.lib": "org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe",
                "transient_lastDdlTime": "1589255544"
            }
        }
    ],
    "NextToken": "eyJsYXN0RXZhbHVhdGVkS2V5Ijp7IkhBU0hfS0VZIjp7InMiOiJ0Ljk0YWZjYjk1MjJjNTQ1YmU4Y2I5OWE5NTg0MjFjYTYzIn0sIlJBTkdFX0tFWSI6eyJzIjoiY2xlYXJpbmdob3VzZV9kYXRhIn19LCJleHBpcmF0aW9uIjp7InNlY29uZHMiOjE1ODkzNDIwMjIsIm5hbm9zIjo2NTUwMDAwMDB9fQ=="
}
```

## Exécution d'instructions DDL et DML
<a name="datastores-hive-cli-running-ddl-and-dml"></a>

Lorsque vous utilisez les instructions DDL et DML AWS CLI pour exécuter, vous pouvez transmettre le nom du catalogue de métastores Hive de deux manières :
+ Directement dans les déclarations qui le soutiennent.
+ Au paramètre `--query-execution-context` `Catalog`.

### Instructions DDL
<a name="datastores-hive-cli-ddl-statements"></a>

L'exemple suivant transmet le nom du catalogue directement dans le cadre de l'instruction `show create table` DDL. La commande a été formatée pour être lisible.

```
$ aws athena start-query-execution 
 --query-string "show create table hms-catalog-1.hms_tpch_partitioned.lineitem" 
 --result-configuration "OutputLocation=s3://amzn-s3-demo-bucket/lambda/results"
```

L'exemple suivant d'instruction `show create table` DDL utilise le paramètre `Catalog` de `--query-execution-context` pour transmettre le nom du catalogue de métastore Hive `hms-catalog-1`. La commande a été formatée pour être lisible.

```
$ aws athena start-query-execution 
 --query-string "show create table lineitem" 
 --query-execution-context "Catalog=hms-catalog-1,Database=hms_tpch_partitioned" 
 --result-configuration "OutputLocation=s3://amzn-s3-demo-bucket/lambda/results"
```

### Instructions DML
<a name="datastores-hive-cli-dml-statements"></a>

L'exemple suivant d'instruction `select` DML transmet directement le nom du catalogue dans la requête. La commande a été formatée pour être lisible.

```
$ aws athena start-query-execution
 --query-string "select * from hms-catalog-1.hms_tpch_partitioned.customer limit 100" 
 --result-configuration "OutputLocation=s3://amzn-s3-demo-bucket/lambda/results"
```

L'exemple suivant d'instruction `select` DML utilise le paramètre `Catalog` de `--query-execution-context` pour transmettre le nom du catalogue de métastore Hive `hms-catalog-1`. La commande a été formatée pour être lisible.

```
$ aws athena start-query-execution 
 --query-string "select * from customer limit 100" 
 --query-execution-context "Catalog=hms-catalog-1,Database=hms_tpch_partitioned" 
 --result-configuration "OutputLocation=s3://amzn-s3-demo-bucket/lambda/results"
```

# Modification du connecteur Athena pour métastore Hive externe
<a name="datastores-hive-reference-implementation"></a>

Si vous avez des exigences particulières, vous pouvez modifier le connecteur Athena pour métastore Hive externe pour votre propre usage. Athena fournit une implémentation de référence du connecteur sur GitHub .com à l'adresse. [https://github.com/awslabs/aws-athena-hive-metastore](https://github.com/awslabs/aws-athena-hive-metastore) La plupart des cas d'utilisation n'exigent pas que vous modifiiez l'implémentation de référence. Toutefois, si nécessaire, vous pouvez modifier le code source et créer les artefacts vous-même.

L'implémentation de référence est un projet [Apache Maven](https://maven.apache.org/) qui a les modules suivants :
+ `hms-service-api` – Contient les opérations d'API entre la fonction Lambda et les clients du service Athena. Ces opérations d'API sont définies dans l'interface `HiveMetaStoreService`. Comme il s'agit d'un contrat de service, vous ne devriez rien changer dans ce module.
+ `hms-lambda-handler` – Un ensemble de gestionnaires Lambda par défaut qui traitent tous les appels de l'API de métastore Hive. La classe `MetadataHandler` est le répartiteur pour tous les appels d'API. Vous n'avez pas besoin de modifier ce package.
+ `hms-lambda-func` – Exemple de fonction Lambda comportant les composants suivants.
  + `HiveMetaStoreLambdaFunc` – Exemple de fonction Lambda qui étend `MetadataHandler`.
  + `ThriftHiveMetaStoreClient` – Client Thrift qui communique avec le métastore Hive. Ce client est écrit pour Hive 2.3.0. Si vous utilisez une version différente de Hive, vous devrez peut-être mettre à jour cette classe pour vous assurer que les objets de réponse sont compatibles.
  + `ThriftHiveMetaStoreClientFactory` – Contrôle le comportement de la fonction Lambda. Par exemple, vous pouvez fournir votre propre ensemble de fournisseurs de gestionnaires en remplaçant la méthode `getHandlerProvider()`.
  + `hms.properties` – Configure la fonction Lambda. La plupart des cas nécessitent la mise à jour des deux propriétés suivantes uniquement.
    + `hive.metastore.uris` – l'URI du métastore Hive au format `thrift://<host_name>:9083`.
    + `hive.metastore.response.spill.location` : l'emplacement Amazon S3 pour stocker les objets de réponse lorsque leur taille dépasse un seuil donné (par exemple, 4 Mo). Le seuil est défini dans la propriété `hive.metastore.response.spill.threshold`. Il n'est pas recommandé de modifier la valeur par défaut.
**Note**  
Ces deux propriétés peuvent être remplacées par les [variables d'environnement Lambda](https://docs.aws.amazon.com/lambda/latest/dg/env_variables.html) `HMS_URIS` et `SPILL_LOCATION`. Utilisez ces variables au lieu de recompiler le code source de la fonction Lambda lorsque vous souhaitez utiliser la fonction avec un métastore Hive ou un emplacement de déversement différent.
+ `hms-lambda-layer` – Un projet d'assemblage Maven qui place `hms-service-api`, `hms-lambda-handler` et leurs dépendances dans un fichier `.zip`. Le fichier `.zip` est enregistré en tant que couche Lambda pour une utilisation par plusieurs fonctions Lambda.
+ `hms-lambda-rnp` – Enregistre les réponses d'une fonction Lambda, puis les utilise pour rejouer la réponse. Vous pouvez utiliser ce modèle pour simuler des réponses Lambda à des fins de test.

## Construire les artefacts vous-même
<a name="datastores-hive-reference-implementation-building-the-artifacts-yourself"></a>

Une fois le code source modifié, vous pouvez créer les artefacts vous-même et les télécharger dans un emplacement Amazon S3.

Avant de créer les artefacts, mettez à jour les propriétés `hive.metastore.uris` et `hive.metastore.response.spill.location` dans le fichier `hms.properties` du module `hms-lambda-func`.

Pour construire les artefacts, vous devez avoir Apache Maven installé et exécuter la commande `mvn install`. Cela génère le fichier `.zip` de couche dans le dossier de sortie appelé `target` dans le module `hms-lambda-layer` et le fichier `.jar` de fonction Lambda dans le module `hms-lambd-func`.