Connecteur Amazon Athena pour OpenSearch
OpenSearch Service
Le connecteur Amazon Athena OpenSearch permet à Amazon Athena de communiquer avec vos instances OpenSearch afin que vous puissiez utiliser SQL pour requêter vos données OpenSearch.
Ce connecteur peut être enregistré auprès du Catalogue de données Glue en tant que catalogue fédéré. Il prend en charge les contrôles d’accès aux données définis dans Lake Formation aux niveaux catalogue, base de données, table, colonne, ligne et balise. Ce connecteur utilise les connexions Glue pour centraliser les propriétés de configuration dans Glue.
Note
En raison d'un problème connu, le connecteur OpenSearch ne peut pas être utilisé avec un VPC.
Si Lake Formation est activé sur votre compte, le rôle IAM de votre connecteur Lambda fédéré Athena que vous avez déployé dans le AWS Serverless Application Repository doit avoir un accès en lecture au AWS Glue Data Catalog dans Lake Formation.
Prérequis
Déployez le connecteur sur votre Compte AWS à l’aide de la console Athena ou du AWS Serverless Application Repository. Pour plus d’informations, consultez Création d’une connexion à une source de données ou Utilisation d’AWS Serverless Application Repository pour déployer un connecteur de source de données.
Conditions
Les termes suivants se rapportent au connecteur OpenSearch.
-
Domain (Domaine) – Un nom que ce connecteur associe au point de terminaison de votre instance OpenSearch. Le domaine est également utilisé comme nom de base de données. Pour les instances OpenSearch définies dans Amazon OpenSearch Service, le domaine est détectable automatiquement. Pour les autres cas, vous devez fournir un mappage entre le nom de domaine et le point de terminaison.
-
Index – Une table de base de données définie dans votre instance OpenSearch.
-
Mapping (Mappage) – Si un index est une table de base de données, le mappage est son schéma (c’est-à-dire les définitions de ses champs et attributs).
Ce connecteur prend en charge à la fois la récupération de métadonnées depuis l’instance OpenSearch et depuis le AWS Glue Data Catalog. Si le connecteur trouve une base de données et une table AWS Glue qui correspondent à vos noms de domaine et d’index OpenSearch, le connecteur tente de les utiliser pour la définition de schéma. Nous vous recommandons de créer votre table AWS Glue afin qu’il s’agisse d’un sur-ensemble de tous les champs de votre index OpenSearch.
-
Document – Un enregistrement au sein d’une table de base de données.
-
Flux de données – Données temporelles composées de plusieurs index de support. Pour plus d'informations, consultez Flux de données
dans la documentation OpenSearch et Premiers pas avec les flux de données dans le Guide du développeur Amazon OpenSearch Service. Note
Les index de flux de données étant créés et gérés en interne par OpenSearch, le connecteur choisit le mappage de schéma à partir du premier index disponible. Pour cette raison, nous vous recommandons vivement de configurer une table AWS Glue comme source de métadonnées supplémentaire. Pour de plus amples informations, consultez Configuration de bases de données et de tables dans AWS Glue.
Paramètres
Utilisez les paramètres de cette section pour configurer le connecteur OpenSearch.
Note
Les connecteurs de source de données Athena créés le 3 décembre 2024 et les versions ultérieures utilisent des connexions AWS Glue.
Les noms et définitions de paramètres répertoriés ci-dessous concernent les connecteurs de source de données Athena créés avant le 3 décembre 2024. Ces noms et définitions peuvent différer de ceux des propriétés de connexion AWS Glue correspondantes. À compter du 3 décembre 2024, utilisez les paramètres ci-dessous uniquement lorsque vous déployez manuellement une version antérieure d’un connecteur de source de données Athena.
Nous vous recommandons de configurer un connecteur OpenSearch en utilisant un objet des connexions Glue. Pour ce faire, définissez la variable d’environnement glue_connection du connecteur OpenSearch Lambda sur le nom de la connexion Glue à utiliser.
Propriétés des connexions Glue
Utilisez la commande suivante afin d’obtenir le schéma d’un objet de connexion Glue. Ce schéma contient tous les paramètres que vous pouvez utiliser pour contrôler votre connexion.
aws glue describe-connection-type --connection-type OPENSEARCH
Propriétés d’environnement Lambda
-
glue_connection – Spécifie le nom de la connexion Glue associée au connecteur fédéré.
Note
-
Tous les connecteurs qui utilisent des connexions Glue doivent utiliser AWS Secrets Manager pour stocker les informations d’identification.
-
Le connecteur OpenSearch créé à l’aide des connexions Glue ne prend pas en charge l’utilisation d’un gestionnaire de multiplexage.
-
Le connecteur OpenSearch créé à l’aide des connexions Glue prend uniquement en charge
ConnectionSchemaVersion2.
-
spill_bucket – Spécifie le compartiment Amazon S3 pour les données qui dépassent les limites des fonctions Lambda.
-
spill_prefix – (Facultatif) Par défaut, il s’agit d’un sous-dossier dans le
spill_bucketspécifié appeléathena-federation-spill. Nous vous recommandons de configurer un cycle de vie de stockage Amazon S3 à cet endroit pour supprimer les déversements supérieurs à un nombre de jours ou d’heures prédéterminé. -
spill_put_request_headers – (Facultatif) Une carte codée au format JSON des en-têtes et des valeurs des demandes pour la demande
putObjectAmazon S3 utilisée pour le déversement (par exemple,{"x-amz-server-side-encryption" : "AES256"}). Pour les autres en-têtes possibles, consultez PutObject dans la Référence d'API Amazon Simple Storage Service. -
kms_key_id – (Facultatif) Par défaut, toutes les données déversées vers Amazon S3 sont chiffrées à l'aide du mode de chiffrement authentifié AES-GCM et d'une clé générée de manière aléatoire. Pour que votre fonction Lambda utilise des clés de chiffrement plus puissantes générées par KMS, comme
a7e63k4b-8loc-40db-a2a1-4d0en2cd8331, vous pouvez spécifier l’ID d’une clé KMS. -
disable_spill_encryption – (Facultatif) Lorsque la valeur est définie sur
True, le chiffrement des déversements est désactivé. La valeur par défaut estFalseafin que les données déversées vers S3 soient chiffrées à l’aide d’AES-GCM, soit à l’aide d’une clé générée de manière aléatoire soit à l’aide de KMS pour générer des clés. La désactivation du chiffrement des déversements peut améliorer les performances, surtout si votre lieu de déversement utilise le chiffrement côté serveur. -
disable_glue – (Facultatif) S’il est présent et défini sur true, le connecteur ne tente pas de récupérer des métadonnées supplémentaires depuis AWS Glue.
-
query_timeout_cluster – Le délai d’expiration, en secondes, pour les requêtes d’intégrité du cluster utilisées dans la génération d’examens parallèles.
-
query_timeout_search – Le délai d’expiration, en secondes, des requêtes de recherche utilisées pour récupérer des documents à partir d’un index.
-
auto_discover_endpoint – Valeur booléenne. La valeur par défaut est
true. Lorsque vous utilisez Amazon OpenSearch Service et que vous définissez ce paramètre sur true, le connecteur peut détecter automatiquement vos domaines et points de terminaison en appelant les opérations d’API de description ou de liste appropriées sur le service OpenSearch. Pour tout autre type d’instance OpenSearch (par exemple, auto-hébergé), vous devez spécifier les points de terminaison de domaine associés dans la variabledomain_mapping. Siauto_discover_endpoint=true, le connecteur utilise les informations d’identification AWS pour s’authentifier auprès du service OpenSearch. Sinon, le connecteur extrait les informations d’identification (nom d’utilisateur et mot de passe) depuisAWS Secrets Manager jusqu’à la variabledomain_mapping. -
domain_mapping – Utilisé uniquement lorsque
auto_discover_endpointest défini sur false et définit le mappage entre les noms de domaine et leurs points de terminaison associés. La variabledomain_mappingpeut prendre en charge plusieurs points de terminaison OpenSearch dans le format suivant :domain1=endpoint1,domain2=endpoint2,domain3=endpoint3,...À des fins d’authentification auprès d’un point de terminaison OpenSearch, le connecteur prend en charge les chaînes de substitution injectées à l’aide du format
${SecretName}avec le nom d’utilisateur et le mot de passe récupérés depuis AWS Secrets Manager. Le secret doit être stocké au format JSON suivant :{ "username": "your_username", "password": "your_password" }Le connecteur analysera automatiquement cette structure JSON pour récupérer les informations d’identification.
Important
Afin de vous aider à optimiser la sécurité, n’utilisez pas d’informations d’identification codées en dur dans vos variables d’environnement ou vos chaînes de connexion. Pour plus d'informations sur le déplacement de vos secrets codés en dur vers AWS Secrets Manager, consultez Déplacer les secrets codés en dur vers AWS Secrets Manager dans le Guide de l'utilisateur AWS Secrets Manager.
L’exemple suivant utilise le secret
opensearch-creds.movies=https://${opensearch-creds}:search-movies-ne...qu---us-east-1---es.amazonaws.com.rproxy.govskope.caAu moment de l’exécution,
${opensearch-creds}est affiché sous la forme du nom d’utilisateur et du mot de passe, comme dans l’exemple suivant.movies=https://myusername@mypassword:search-movies-ne...qu---us-east-1---es.amazonaws.com.rproxy.govskope.caDans le paramètre
domain_mapping, chaque paire domaine-point de terminaison peut utiliser un secret différent. Le secret lui-même doit être spécifié au formatnom_utilisateur@mot de passe. Bien que le mot de passe puisse contenir des signes@intégrés, le premier@sert de séparateur denom_utilisateur.Il est également important de noter que la virgule (,) et le signe égal (=) sont utilisés par ce connecteur comme séparateurs pour les paires domaine-point de terminaison. Pour cette raison, vous ne devez les utiliser nulle part dans le secret stocké.
Configuration de bases de données et de tables dans AWS Glue
Le connecteur obtient des informations de métadonnées en utilisant AWS Glue ou OpenSearch. Vous pouvez configurer une table AWS Glue en tant que source de définition de métadonnées supplémentaire. Pour activer cette fonctionnalité, définissez une base de données AWS Glue et une table qui correspondent au domaine et à l’index de la source que vous complétez. Le connecteur peut également tirer parti des définitions de métadonnées stockées dans l’instance OpenSearch en récupérant le mappage de l’index spécifié.
Définition des métadonnées pour les tableaux dans OpenSearch
OpenSearch ne dispose pas d’un type de données de tableau dédié. Chaque champ peut contenir zéro ou plusieurs valeurs, à condition qu’elles soient du même type de données. Si vous souhaitez utiliser OpenSearch comme source de définition de métadonnées, vous devez définir une propriété _meta pour tous les indices utilisés avec Athena pour les champs à considérer comme une liste ou un tableau. Si vous ne parvenez pas à effectuer cette étape, les requêtes renvoient uniquement le premier élément du champ de liste. Lorsque vous spécifiez la propriété _meta, les noms de champs doivent être entièrement qualifiés pour les structures JSON imbriquées (par exemple, address.street, où street est un champ imbriqué dans une structure address).
L’exemple suivant définit les listes actor et genre dans la table movies.
PUT movies/_mapping { "_meta": { "actor": "list", "genre": "list" } }
Types de données
Le connecteur OpenSearch peut extraire des définitions de métadonnées à partir de AWS Glue ou de l’instance OpenSearch. Le connecteur utilise le mappage du tableau suivant pour convertir les définitions en types de données Apache Arrow, y compris les points notés dans la section suivante.
| OpenSearch | Apache | AWS Glue |
|---|---|---|
| texte, mot clé, binaire | VARCHAR | chaîne |
| long | BIGINT | bigint |
| scaled_float | BIGINT | SCALED_FLOAT(...) |
| entier | INT | int |
| short | SMALLINT | smallint |
| octet | TINYINT | tinyint |
| double | FLOAT8 | double |
| float, half_float | FLOAT4 | float |
| boolean | BIT | boolean |
| date, date_nanos | DATEMILLI | timestamp |
| Structure JSON | STRUCT | STRUCT |
| _meta (pour plus d’informations, consultez la section Définition des métadonnées pour les tableaux dans OpenSearch.) | LIST | ARRAY |
Remarques sur les types de données
-
Actuellement, le connecteur prend uniquement en charge les types de données OpenSearch et AWS Glue répertoriés dans le tableau précédent.
-
Un
scaled_floatest un nombre à virgule flottante mis à l’échelle par un facteur de mise à l’échelle double fixe et représenté en tant queBIGINTdans Apache Arrow. Par exemple, 0,756 avec un facteur d’échelle de 100 est arrondi à 76. -
Pour définir un
scaled_floatdans AWS Glue, vous devez sélectionner le type de colonnearrayet déclarer le champ en utilisant le format SCALED_FLOAT (scaling_factor).Les exemples suivants sont valides :
SCALED_FLOAT(10.51) SCALED_FLOAT(100) SCALED_FLOAT(100.0)Les exemples suivants ne sont pas valides :
SCALED_FLOAT(10.) SCALED_FLOAT(.5) -
Lors de la conversion de
date_nanosversDATEMILLI, les nanosecondes sont arrondies à la milliseconde la plus proche. Valeurs valides pourdateetdate_nanosincluent, sans s’y limiter, les formats suivants :"2020-05-18T10:15:30.123456789" "2020-05-15T06:50:01.123Z" "2020-05-15T06:49:30.123-05:00" 1589525370001 (epoch milliseconds) -
Un
binaryOpenSearch est une représentation de chaîne d’une valeur binaire codée enBase64et est converti enVARCHAR.
Exécution de requêtes SQL
Vous trouverez ci-dessous des exemples de requêtes DDL que vous pouvez utiliser avec ce connecteur. Dans les exemples,function_name correspond au nom de votre fonction Lambda,domaine est le nom du domaine à interroger et index est le nom de votre index.
SHOW DATABASES in `lambda:function_name`
SHOW TABLES in `lambda:function_name`.domain
DESCRIBE `lambda:function_name`.domain.index
Performances
Le connecteur Athena OpenSearch prend en charge les examens parallèles basés sur des partitions. Le connecteur utilise les informations d’intégrité du cluster extraites de l’instance OpenSearch pour générer plusieurs demandes pour une requête de recherche de document. Les demandes sont réparties pour chaque partition et exécutées simultanément.
Le connecteur transfère également des prédicats dans le cadre de ses requêtes de recherche de documents. L’exemple de requête et de prédicat suivant montre comment le connecteur utilise le prédicat poussé vers le bas.
Requête
SELECT * FROM "lambda:elasticsearch".movies.movies WHERE year >= 1955 AND year <= 1962 OR year = 1996
Prédicat
(_exists_:year) AND year:([1955 TO 1962] OR 1996)
Requêtes de transmission
Le connecteur OpenSearch prend en charge les requêtes de transmission et utilise le langage Query DSL. Pour plus d’informations sur les interrogations avec Query DSL, consultez Query DSL
Pour utiliser les requêtes de transmission avec le connecteur OpenSearch, utilisez la syntaxe suivante :
SELECT * FROM TABLE( system.query( schema => 'schema_name', index => 'index_name', query => "{query_string}" ))
L’exemple de requête de transmission OpenSearch ci-dessous filtre les employés ayant un statut professionnel actif dans l’index employee du schéma default.
SELECT * FROM TABLE( system.query( schema => 'default', index => 'employee', query => "{ ''bool'':{''filter'':{''term'':{''status'': ''active''}}}}" ))
Ressources supplémentaires
-
Pour un article sur l'utilisation du connecteur Amazon Athena OpenSearch pour interroger des données dans Amazon OpenSearch Service et Amazon S3 en une seule requête, consultez Interroger des données dans Amazon OpenSearch Service à l'aide de SQL dans Amazon Athena
sur le blog AWS Big Data. Pour plus d'informations sur ce connecteur, consultez le site correspondant
sur GitHub.com.