Logotipo de Zephyrnet

Mejore la reutilización y la seguridad mediante consultas parametrizadas de Amazon Athena

Fecha:

Atenea amazónica es un servicio de consulta interactivo sin servidor que facilita el análisis de datos en Servicio de almacenamiento simple de Amazon (Amazon S3) usando SQL estándar, y solo pague por la cantidad de datos escaneados por sus consultas. Si usa SQL para analizar su negocio a diario, es posible que se encuentre ejecutando repetidamente las mismas consultas o consultas similares con ajustes menores. Las consultas parametrizadas de Athena le permiten preparar declaraciones puede reutilizar con diferentes valores de argumento que proporcione en tiempo de ejecución. Las consultas parametrizadas de Athena también brindan una capa de seguridad contra ataques de inyección SQL y enmascaran la cadena de consulta en Seguimiento de la nube de AWS para cargas de trabajo con datos confidenciales.

Esta publicación le muestra cómo crear y ejecutar consultas parametrizadas en Athena. Esta publicación proporciona un ejemplo de cómo las consultas parametrizadas de Athena protegen contra la inyección de SQL y muestra los eventos de CloudTrail con la cadena de consulta enmascarada. Por último, la publicación revisa las funciones relacionadas con la gestión de las declaraciones preparadas de Athena. Si desea seguir adelante, esta publicación proporciona pasos para configurar los componentes con un conjunto de datos de muestra; como alternativa, puede utilizar su propio conjunto de datos.

Reutilización

Las declaraciones preparadas de Athena le permiten ejecutar y reutilizar consultas dentro de su grupo de trabajo de Athena. Al desacoplar las consultas del código, puede actualizar sus declaraciones preparadas y sus aplicaciones independientemente unas de otras. Si un lago de datos tiene actualizaciones de esquema, podría requerir actualizaciones de consulta. Si varias aplicaciones comparten el mismo grupo de trabajo de Athena y usan consultas similares, puede crear una nueva consulta o actualizar la consulta existente para atender múltiples casos de uso, sin que cada aplicación tenga que ajustar consultas similares en su propio código fuente. Actualmente, las consultas parametrizadas son compatibles con las declaraciones SELECT, INSERT IGNORE INTO, CTAS y UNLOAD. Para obtener la lista más actualizada, consulte Consideraciones y limitaciones en Consulta con declaraciones preparadas.

Seguridad

Las declaraciones preparadas de Athena brindan una capa de protección contra la inyección de SQL. Si está utilizando Athena detrás de una interfaz de aplicación, las entradas de texto libre inherentemente presentan un vector de amenaza de inyección SQL que, si no se mitiga, podría resultar en la filtración de datos. Cuando se ejecuta la consulta parametrizada, Athena interpreta los argumentos como valores literales, no como comandos ejecutables ni fragmentos de SQL como los operadores de SQL.

Al usar Atenea, CloudTrail captura todas las llamadas a la API de Athena como eventos de auditoría para proporcionar un registro de las acciones realizadas por un usuario, rol o servicio de AWS. Los clientes con datos confidenciales en sus lagos de datos, como información de identificación personal (PII), nos han dicho que no quieren cadenas de consulta en su historial de eventos de CloudTrail por motivos de cumplimiento. Cuando se ejecutan consultas parametrizadas, la cadena de consulta se enmascara con HIDDEN_DUE_TO_SECURITY_REASONS en el evento de CloudTrail, por lo que no muestra datos protegidos dentro de sus flujos de registro.

Resumen de la solución

Esta publicación documenta los pasos usando el público Conjunto de datos de reseñas de clientes de Amazon.com; sin embargo, puede seguir pasos similares para usar su propio conjunto de datos.

La consulta de ejemplo es encontrar las reseñas de 4 estrellas (de 5 estrellas) de un producto votadas como las más útiles por otros clientes. La intención detrás de la consulta es encontrar resultados de consulta que indiquen comentarios constructivos sobre el producto. La intención es validar los comentarios y obtener comentarios útiles incorporados en la hoja de ruta del producto. El producto utilizado en este caso de uso es la tarjeta de regalo electrónica Amazon Smile.

Requisitos previos

Como requisito previo, necesita una comprensión básica de la sintaxis SQL, así como una comprensión básica de los siguientes servicios de AWS:

Esta publicación asume que usted tiene:

  • Se ha creado un rastro de CloudTrail; para obtener instrucciones, consulte Creando un sendero.
  • Se creó un depósito S3: para obtener instrucciones, consulte Crear un cubo.

Implementar recursos para el conjunto de datos de ejemplo

Si está utilizando el conjunto de datos de ejemplo, siga los pasos de esta sección. Los datos están en un depósito S3 en una cuenta de AWS administrada por AWS. Debe crear recursos de Athena y AWS Glue para comenzar.

Esta publicación proporciona una plantilla de CloudFormation que implementa los siguientes recursos en su cuenta de AWS:

  • AthenaWorkGroup - Un Grupo de trabajo de Athena para su conjunto de datos y declaraciones preparadas. En la consola, este grupo de trabajo se llama PreparedStatementsWG.
  • PegamentoBase de datos – Una base de datos en AWS Glue Data Catalog para metadatos de tablas. La base de datos se llama athena_prepared_statements.
  • GlueTableAmazonReseñas – Una tabla externa con opiniones de clientes de Amazon.com en el Catálogo de datos.

El siguiente diagrama muestra cómo interactúan los recursos cuando se ejecuta la consulta.
Diagrama que representa la cuenta de AWS de un cliente y una cuenta de AWS administrada por AWS. En la cuenta del cliente, hay un cuadro de región. En la región, hay un grupo de trabajo de Amazon Athena que está dando 3 pasos. En el primer paso, el grupo de trabajo accede a los metadatos del catálogo de datos de AWS Glue denominado predeterminado. El catálogo tiene una línea de puntos a una tabla de AWS Glue llamada amazon_reviews_parquet, que tiene los atributos y la ubicación del depósito S3. El segundo paso del grupo de trabajo consulta los datos del depósito S3. El depósito S3 está en la cuenta de AWS administrada por AWS. El cubo es para el conjunto de datos de Reseñas de clientes de Amazon. En el tercer paso, el grupo de trabajo almacena los resultados de la consulta en el depósito de Amazon S3 en la cuenta de AWS del cliente. Los resultados de la consulta pueden ser leídos por los usuarios con acceso de lectura al grupo de trabajo de Athena.

Para implementar la plantilla de CloudFormation, siga estos pasos:

  1. Navegar a esta publicación Repositorio GitHub.
  2. Clone el repositorio o copie la plantilla de CloudFormation athena-prepared-statements.yaml.
  3. En la consola de AWS CloudFormation, elija Crear pila.< /li>
  4. Seleccione Subir un archivo de plantilla y elige Elija el archivo.
  5. Subir athena-prepared-statements.yaml, A continuación, elija Siguiente.
  6. En Especificar detalles de la pila página, ingrese el nombre de la pila athena-prepared-statements-blog.
  7. S3QueryResultsBucketName, ingrese el nombre de su depósito S3.
  8. Si te vas Nombre del grupo de trabajo de Athena por defecto, el grupo de trabajo de Athena se llama PreparedStatementsWG. Si cambia el valor, el nombre del grupo de trabajo de Athena debe ser único en su región de AWS.
  9. Elige Siguiente.
  10. En Configurar opciones de pila página, elige Siguiente.
  11. En Revisar página, elige Crear pila.

El script tarda menos de un minuto en ejecutarse y cambiar a un CREATE_COMPLETE estado. Si implementa la pila dos veces en la misma cuenta y región de AWS, es posible que la base de datos, la tabla o el grupo de trabajo de Athena de AWS Glue ya existan, y el proceso falla con un mensaje que indica que el recurso ya existe en otra plantilla.

Para la autorización de privilegios mínimos para la implementación de la plantilla de CloudFormation, puede crear un Rol de servicio de AWS CloudFormation con las siguientes acciones de política de IAM. Para ello, debe crear un política de gestión de identidades y accesos y Rol de IAMy elija este rol al configurar las opciones de pila.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:CreateDatabase" ], "Resource": [ "arn:${Partition}:glue:${Region}:${Account}:catalog", "arn:${Partition}:glue:${Region}:${Account}:database/athena_prepared_statements" ] }, { "Effect": "Allow", "Action": [ "glue:DeleteDatabase" ], "Resource": [ "arn:${Partition}:glue:${Region}:${Account}:catalog", "arn:${Partition}:glue:${Region}:${Account}:database/athena_prepared_statements", "arn:${Partition}:glue:${Region}:${Account}:table/athena_prepared_statements/*", "arn:${Partition}:glue:${Region}:${Account}:userDefinedFunction/athena_prepared_statements/*" ] }, { "Effect": "Allow", "Action": [ "glue:CreateTable" ], "Resource": [ "arn:${Partition}:glue:${Region}:${Account}:catalog", "arn:${Partition}:glue:${Region}:${Account}:database/athena_prepared_statements", "arn:${Partition}:glue:${Region}:${Account}:table/athena_prepared_statements/amazon_reviews_parquet" ] }, { "Effect": "Allow", "Action": [ "glue:DeleteTable" ], "Resource": [ "arn:${Partition}:glue:${Region}:${Account}:catalog", "arn:${Partition}:glue:${Region}:${Account}:database/athena_prepared_statements", "arn:${Partition}:glue:${Region}:${Account}:table/athena_prepared_statements/amazon_reviews_parquet" ] }, { "Effect": "Allow", "Action": [ "athena:CreateWorkGroup", "athena:DeleteWorkGroup", "athena:GetWorkGroup" ], "Resource": "arn:${Partition}:athena:${Region}:${Account}:workgroup/PreparedStatementsWG" } ]
}

Para la autorización de la entidad principal de IAM que ejecuta la plantilla de CloudFormation y sigue adelante, esta publicación se probó con las siguientes políticas administradas por AWS y la política administrada por el cliente a continuación.

Políticas administradas por AWS:

  • AmazonAthenaAcceso completo
  • AWSCloudTrailReadOnlyAcceso
  • AWSCloudFormationAcceso completo

Política gestionada por el cliente:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ViewS3BucketsWithoutErrors", "Effect": "Allow", "Action": [ "s3:ListAllMyBuckets" ], "Resource": [ "*" ] }, { "Sid": "InteractWithMyBucketAndDataSetBucket", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetBucketLocation", "s3:ListBucket", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::${my-bucket-name}*", "arn:aws:s3:::amazon-reviews-pds*" ] }, { "Sid": "UploadCloudFormationTemplate", "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::cf-template*" }, { "Sid": "CleanUpResults", "Effect": "Allow", "Action": [ "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::${my-bucket-name}/results*" ] }, { "Sid": "ListRolesForCloudFormationDeployment", "Effect": "Allow", "Action": [ "iam:ListRoles" ], "Resource": [ "*" ] }, { "Sid": "IAMRoleForCloudFormationDeployment", "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": [ "arn:${Partition}:iam::${Account}:role/${role-name}" ], "Condition": { "StringEquals": { "iam:PassedToService": "cloudformation.amazonaws.com" } } } ]
}

Particionar el conjunto de datos de ejemplo

La plantilla de CloudFormation creó una tabla externa que apunta a un conjunto de datos de más de 130 millones de reseñas de clientes de Amazon.com. Partición de datos mejora el rendimiento de las consultas y reduce los costos al restringir la cantidad de datos escaneados por cada consulta. La tabla externa para este conjunto de datos tiene particiones compatibles con Hive. La instrucción SQL MSCK REPAIR TABLE analiza las rutas de prefijo en el depósito S3 y actualiza los metadatos en el catálogo de datos con los metadatos de la partición. Para acceder al conjunto de datos, las particiones de la tabla externa deben actualizarse.

Después de implementar la plantilla de CloudFormation, complete los siguientes pasos:

  1. En la consola de Athena, elija Editor de consultas en el panel de navegación.
  2. Fuente de datos, introduzca AwsDataCatalog.
  3. Base de datos, introduzca athena_prepared_statements.
  4. En Forma de interés del Grupo de Trabajo menú desplegable, elija DeclaracionesPreparadasWG.
  5. Elige Reconocer para confirmar.
  6. En el panel del editor de consultas, ejecute la siguiente instrucción SQL para su tabla externa:
MSCK REPAIR TABLE athena_prepared_statements.amazon_reviews_parquet;

Esta consulta tarda aproximadamente 15 segundos en ejecutarse cuando se prueba en us-east-1.

  1. Ejecute la siguiente consulta para enumerar las particiones disponibles. El conjunto de datos de ejemplo tiene particiones basadas en product_category.
SHOW PARTITIONS athena_prepared_statements.amazon_reviews_parquet;
  1. Ejecute una instrucción SELECT para generar una muestra de los datos disponibles en la tabla:
SELECT * FROM athena_prepared_statements.amazon_reviews_parquet limit 10;

Crear declaraciones preparadas

Para utilizar las consultas parametrizadas de Athena, primero ejecute la declaración SQL PREPARE y especifique sus parámetros posicionales, indicados por signos de interrogación. La instrucción preparada de Athena se almacena con el nombre que especifique.

Ejecute la siguiente sentencia PREPARE en el editor de consultas de Athena. Esta consulta de ejemplo, denominada product_helpful_reviews, proporciona reseñas de clientes con tres parámetros para una identificación de producto específica, calificación de estrellas proporcionada por el revisor y número mínimo de votos útiles proporcionados a la reseña por otros clientes de Amazon.com.

PREPARE product_helpful_reviews FROM
SELECT product_id, product_title, star_rating, helpful_votes, review_headline, review_body
FROM amazon_reviews_parquet WHERE product_id = ? AND star_rating = ? AND helpful_votes > ?
ORDER BY helpful_votes DESC
LIMIT 10;

También puede usar la API o el SDK de CreatePreparedStatement. Por ejemplo, para crear su declaración preparada desde AWS CLI, ejecute el siguiente comando:

aws athena create-prepared-statement --statement-name "product_helpful_reviews" --query-statement "SELECT product_id, product_title, star_rating, helpful_votes, review_headline, review_body FROM amazon_reviews_parquet WHERE product_id = ? AND star_rating = ? AND helpful_votes > ? ORDER BY helpful_votes DESC LIMIT 10;" --work-group PreparedStatementsWG --region region

Para obtener más información sobre cómo crear sentencias preparadas, consulte Sentencias SQL en Consulta con declaraciones preparadas.

Ejecutar consultas parametrizadas

Puede ejecutar una consulta parametrizada en la instrucción preparada con la instrucción EXECUTE SQL y una cláusula USING. La cláusula USING especifica los valores de los argumentos para los parámetros de la declaración preparada.

Ejecute la siguiente instrucción EXECUTE en el editor de consultas de Athena. La declaración preparada creada en la sección anterior se ejecuta con parámetros para generar reseñas de 4 estrellas para el ID de producto de la tarjeta de regalo electrónica Amazon Smile con al menos 10 votos útiles.

EXECUTE product_helpful_reviews USING 'BT00DDVMVQ', 4, 10;

Si recibe el mensaje PreparedStatement product_helpful_reviews was not found in workGroup primary, asegúrese de haber seleccionado el PreparedStatementsWG grupo de trabajo

Para obtener más información sobre cómo ejecutar consultas parametrizadas, consulte Sentencias SQL en Consulta con declaraciones preparadas.

Enmascarar datos de cadena de consulta en eventos de CloudTrail mediante consultas parametrizadas

Es posible que desee utilizar consultas parametrizadas para redactar datos confidenciales de la cadena de consulta visible en los eventos de CloudTrail. Por ejemplo, puede tener columnas que contengan PII como parámetros, que no desea que estén visibles en los registros. Athena enmascara automáticamente las cadenas de consulta de los eventos de CloudTrail para las declaraciones EXECUTE, reemplazando la cadena de consulta con el valor HIDDEN_DUE_TO_SECURITY_REASONS. Esto lo ayuda a evitar mostrar datos protegidos en sus flujos de registro.

Para acceder al evento de CloudTrail para la consulta, complete los siguientes pasos:

  1. Navegue hasta la Historial de eventos página en la consola de CloudTrail.
  2. En el menú desplegable, elija Nombre del evento.
  3. Busque StartQueryExecution eventos.

Los registros de eventos de CloudTrail para consultas parametrizadas incluyen un queryString valor redactado con HIDDEN_DUE_TO_SECURITY_REASONS. La cadena de consulta es visible en el historial de consultas del grupo de trabajo de Athena. Puede controlar el acceso utilizando políticas de IAM de privilegios mínimos para Athena, AWS Glue Data Catalog y la ubicación de salida de consultas de Amazon S3 en la configuración de su grupo de trabajo. Para obtener más información sobre la visualización de consultas recientes, consulte Visualización de consultas recientes. Para obtener más información sobre las políticas de IAM, consulte Acciones, recursos y claves de condición para los servicios de AWS.

Capa de protección para inyección SQL

En esta sección, se le muestra un ejemplo de un ataque de inyección SQL y cómo las declaraciones preparadas pueden proteger contra el mismo ataque. Usamos la consola de Athena para invocar el StartQueryExecution API contra una tabla llamada users con tres filas.

La inyección SQL es un intento de insertar código SQL malicioso en las solicitudes para cambiar la declaración y extraer datos de las tablas de su conjunto de datos. Sin consultas parametrizadas de Athena, si está consultando un conjunto de datos directamente o agregando la entrada del usuario a una consulta SQL, y los usuarios pueden agregar fragmentos de SQL, el conjunto de datos puede ser vulnerable a ataques de inyección SQL que devuelven datos no autorizados en el conjunto de resultados.

Esta publicación muestra un ejemplo de inserción de un fragmento de SQL de forma maliciosa. En el ejemplo, una condición OR que siempre devolverá verdadero (como OR 1=1) se adjunta a la cláusula WHERE. La misma consulta de ejemplo se muestra con las consultas parametrizadas de Athena y la consulta falla porque contiene un valor de parámetro no válido, ya que se espera que el valor del parámetro sea un número entero pero contiene los caracteres "O". Si el parámetro se basó en una columna de cadena, el mismo intento de inyección SQL daría como resultado que la consulta no arrojara resultados porque el argumento posicional se interpreta como un valor de parámetro literal.

Athena proporciona una capa adicional de defensa contra los ataques de inyección SQL de múltiples instrucciones. Intentar realizar una inyección SQL con un comando ejecutable (como DROP) da como resultado una consulta fallida con Athena proporcionando un error Only one sql statement is allowed, porque Athena solo acepta un comando ejecutable por envío de declaración SQL.

Aunque las declaraciones preparadas de Athena brindan una capa de protección contra los ataques de inyección SQL, otras precauciones brindan capas adicionales de defensa. Las declaraciones preparadas de Athena pueden ser parte de su estrategia de defensa en profundidad. Para obtener más información sobre las capas de seguridad, consulte Seguridad de Amazon Athena.

Ejemplo de inyección de SQL

El uso previsto de la consulta SELECT en el ejemplo es recibir un pequeño conjunto de valores. Sin embargo, un atacante puede manipular la entrada para agregar un código SQL malicioso. Por ejemplo, un atacante puede ingresar un valor de 1 OR 1=1, que agrega una condición verdadera a la cláusula WHERE y devuelve todos los registros de la tabla:

SELECT * FROM users WHERE id = 1 OR 1=1;

Al agregar un código SQL malicioso, el atacante puede recuperar todas las filas del users tabla, como se muestra en la siguiente captura de pantalla.
Una imagen de la interfaz gráfica de usuario de Athena. Una consulta SELECT * FROM usuarios DONDE id = 1 O 1=1; ha sido ejecutado. Los 3 usuarios de la tabla, con los ID 1, 2 y 3, regresaron con todas las columnas de la tabla.

Intento de inyección SQL con una declaración preparada

Si creamos declaraciones preparadas con la misma consulta del ejemplo anterior, el comando ejecutable se pasa como un argumento literal para el valor del parámetro. Si un usuario intenta pasar SQL adicional, recibe un error de sintaxis porque la cláusula WHERE se basa en ID, que espera un valor entero.

  1. Cree una declaración preparada usando la misma consulta contra el users mesa:
PREPARE get_user FROM SELECT * FROM users WHERE id = ?
  1. Establezca el parámetro en un valor legítimo:
EXECUTE get_user USING 1

El resultado esperado regresa, como se muestra en la siguiente captura de pantalla.

Interfaz gráfica de usuario de Athena ejecutando la consulta EJECUTAR get_user USANDO 1. Solo regresó el usuario con id 1.

  1. Ahora, intente pasar un valor malicioso:
EXECUTE get_user USING 1 OR 1=1

La ejecución de esta declaración preparada produce un error de sintaxis, porque se espera un valor entero, pero recibe un valor entero no válido de 1 OR 1=1. La consulta y el error de sintaxis se muestran en la siguiente captura de pantalla.

Interfaz gráfica de usuario de Athena consultando EJECUTAR get_user USANDO 1 O 1=1. Hay un error. El error dice "SYNTAX_ERROR: línea 1:24: El lado izquierdo de la expresión lógica debe evaluarse como un valor booleano (real: entero). Esta consulta se ejecutó en la base de datos "predeterminada", a menos que la consulta lo califique. Publique el mensaje de error en nuestro foro."

Trabajar con declaraciones preparadas

Esta sección describe las funciones administrativas para facilitar el trabajo con declaraciones preparadas.

Listar todas las declaraciones preparadas en mi cuenta de AWS

Para enumerar todas las declaraciones preparadas en un grupo de trabajo de Athena desde el Interfaz de línea de comandos de AWS (AWS CLI), puede ejecutar el siguiente comando:

aws athena list-prepared-statements --work-group workgroup_name --region region_name

Si sigue el ejemplo anterior, el comando devolverá la siguiente respuesta.

{ "PreparedStatements": [ { "StatementName": "product_helpful_reviews", "LastModifiedTime": "2022-01-14T15:33:07.935000+00:00" } ]
}

Para enumerar todos los extractos preparados disponibles en su cuenta de AWS, puede utilizar las API de AWS. Esta publicación proporciona un script de muestra usando el AWS SDK para Python (Boto3) para recorrer todas las regiones de su cuenta y proporcionar los extractos preparados por grupo de trabajo de Athena.

Asegúrese de tener las credenciales de AWS donde planea ejecutar el script de Python. Para obtener más información, consulte Referencias.

Clona el Repositorio GitHub o copie el script de Python list-prepared-statements.py desde el repositorio y ejecute el script:

python3 list-prepared-statements.py

Reemplaza <my-profile-name> con su nombre de perfil de AWS cuando se le solicite, o déjelo en blanco para usar las credenciales locales predeterminadas.

Enter the AWS CLI profile name or leave blank if using instance profile: <my-profile-name>

El siguiente texto es el resultado del script. Si siguiendo, la respuesta devuelve solo el product_helpful_reviews declaración preparada.

eu-north-1:
ap-south-1:
eu-west-3:
eu-west-2:
eu-west-1:
ap-northeast-3:
ap-northeast-2:
ap-northeast-1:
sa-east-1:
ca-central-1:
ap-southeast-1:
ap-southeast-2:
eu-central-1:
us-east-1: athena-v2-wg: my_select PreparedStatementsWG: get_user PreparedStatementsWG: get_contacts_by_company PreparedStatementsWG: product_helpful_reviews PreparedStatementsWG: count_stars PreparedStatementsWG: helpful_reviews PreparedStatementsWG: get_product_info PreparedStatementsWG: check_avg_stars_of_category PreparedStatementsWG: my_select_v1 PreparedStatementsWG: my_select_v2
us-east-2:
us-west-1:
us-west-2:

Actualizar declaraciones preparadas

Tiene algunas opciones para actualizar declaraciones preparadas. Es posible que desee hacer esto para optimizar el rendimiento de su consulta, cambiar los valores que seleccione o por varias otras razones.

  1. Vuelva a ejecutar la instrucción PREPARE con los cambios en el editor de consultas de Athena o contra el StartQueryExecution API.
  2. Ingrese al UpdatePreparedStatement API a través de AWS CLI o SDK.

Puede usar esta API para agregar una descripción a sus declaraciones preparadas o actualizar sus consultas. Para actualizar su declaración de consulta a través de este método, debe proporcionar el nombre de la declaración, el nombre del grupo de trabajo, la declaración de consulta actualizada y, opcionalmente, una nueva descripción. Para obtener más información sobre el UpdatePreparedStatement API, consulte actualización-declaración-preparada.

Es posible que desee implementar versiones de su consulta. Para mantener la compatibilidad con versiones anteriores para los usuarios, puede crear una nueva declaración preparada con un nombre diferente. Por ejemplo, la declaración preparada podría tener un número de versión en su nombre (como my_select_v1 y my_select_v2). Cuando sea necesario, puede comunicar los cambios a los equipos que confían en la declaración preparada y luego desasignar las versiones anteriores de la declaración preparada.

Eliminar declaraciones preparadas

Para eliminar una declaración preparada, puede usar la siguiente sintaxis de consulta cuando contra el StartQueryExecution API, o desde el editor de consultas de Athena:

DEALLOCATE PREPARE product_helpful_reviews

También podrías usar el DeletePreparedStatement API o SDK. Por ejemplo, para eliminar su declaración preparada de AWS CLI, ejecute el siguiente comando:

aws athena delete-prepared-statement --statement-name product_helpful_reviews --work-group PreparedStatementsWG --region region

Limpiar

Si siguió esta publicación, creó varios componentes que pueden generar costos. Para evitar cargos futuros, elimine los recursos con los siguientes pasos:

  1. Eliminar el prefijo de resultados del depósito S3 creado después de ejecutar una consulta en su grupo de trabajo.

Con la plantilla predeterminada, se llama <S3QueryResultsBucketName>/athena-results. Tenga cuidado en este paso. a menos que seas usando el control de versiones en su depósito S3, la eliminación de objetos de S3 no se puede deshacer.

  1. Eliminar las declaraciones preparadas de Athena en el PreparedStatementsWG

Puedes seguir los pasos del Eliminar declaraciones preparadas sección de esta publicación utilizando la instrucción DEALLOCATE PREPARE o delete-prepared-statement API para cada extracto preparado que haya creado.

  1. Para eliminar la pila de CloudFormation, seleccione la pila en la consola de AWS CloudFormation, elija Borrar, y confirma.

Conclusión

Las consultas parametrizadas de Athena facilitan la separación de su base de código de sus consultas al proporcionar una forma de almacenar consultas comunes dentro de su grupo de trabajo de Athena. Esta publicación proporcionó información sobre cómo las consultas parametrizadas de Athena pueden mejorar la reutilización de su código y la seguridad del lago de datos. Mostramos cómo puede configurar un lago de datos de muestra y comenzar a usar consultas parametrizadas hoy. También proporcionamos un ejemplo de las ofertas de consultas parametrizadas de protección y funciones administrativas adicionales detalladas.

Puede comenzar con declaraciones preparadas de Athena a través de la Consola Athena, el CLI de AWS, o el SDK de AWS. Para obtener más información sobre Athena, consulte el Guía del usuario de Amazon Athena.

¡Gracias por leer esta publicación! Si tiene preguntas sobre las consultas parametrizadas de Athena, no dude en dejar un comentario en la sección de comentarios.


Acerca de los autores

Blayze Stefaniak es un arquitecto sénior de soluciones en AWS que trabaja con organizaciones del sector público, finanzas federales y atención médica. Blayze tiene su sede en Pittsburgh. Le apasiona descomponer situaciones complejas en algo práctico y accionable. Sus intereses incluyen la inteligencia artificial, los sistemas distribuidos y la gimnasia con fórmulas de Excel. Blayze tiene una licenciatura en contabilidad y una licenciatura en sistemas de información de la Universidad Clarion de Pensilvania. En su tiempo libre, puedes encontrar a Blayze escuchando audiolibros de Star Wars, tratando de hacer reír a sus perros y probablemente hablando en silencio.

daniel tatarkin es un arquitecto de soluciones en Amazon Web Services (AWS) que brinda apoyo a organizaciones financieras federales. Le apasiona el análisis de big data y las tecnologías sin servidor. Fuera del trabajo, disfruta aprender sobre finanzas personales, café y probar nuevos lenguajes de programación por diversión.

punto_img

Información más reciente

punto_img