Consulta de datos en DynamoDB
En los siguientes ejemplos se muestran algunas formas de usar HiveQL para consultar los datos almacenados en DynamoDB.
Estos ejemplos se refieren a la tabla ddb_features del tutorial (Paso 5: copiar los datos a DynamoDB).
Temas
Uso de funciones de agregación
HiveQL proporciona funciones integradas para sintetizar los valores de los datos. Por ejemplo, puede utilizar la función MAX
para hallar el valor máximo de una columna seleccionada. En el siguiente ejemplo se devuelve la altitud del accidente geográfico más alto del estado de Colorado.
SELECT MAX(elev_in_ft) FROM ddb_features WHERE state_alpha = 'CO';
Uso de las cláusulas GROUP BY y HAVING
Puede utilizar la cláusula GROUP BY
para recopilar datos a través de varios registros. Esto se usa a menudo con una función de agregación, como SUM
, COUNT
, MIN
o MAX
. También puede usar la cláusula HAVING
para descartar todos los resultados que no cumplan determinados criterios.
En el siguiente ejemplo se devuelve una lista con las cinco mayores altitudes de aquellos estados que tienen más de cinco accidentes geográficos contenidos en la tabla ddb_features.
SELECT state_alpha, max(elev_in_ft) FROM ddb_features GROUP BY state_alpha HAVING count(*) >= 5;
Unión de dos tablas de DynamoDB
En el siguiente ejemplo se mapea otra tabla de Hive (east_coast_states) a una tabla de DynamoDB. La instrucción SELECT
es una unión de estas dos tablas. La unión se calcula en el clúster y se devuelve. La unión no tiene lugar en DynamoDB.
Tomemos una tabla de DynamoDB denominada EastCoastStates que contiene los siguientes datos:
StateName StateAbbrev Maine ME New Hampshire NH Massachusetts MA Rhode Island RI Connecticut CT New York NY New Jersey NJ Delaware DE Maryland MD Virginia VA North Carolina NC South Carolina SC Georgia GA Florida FL
Supongamos que la tabla está disponible como una tabla de Hive externa denominada east_coast_states:
CREATE EXTERNAL TABLE ddb_east_coast_states (state_name STRING, state_alpha STRING) STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' TBLPROPERTIES ("dynamodb.table.name" = "EastCoastStates", "dynamodb.column.mapping" = "state_name:StateName,state_alpha:StateAbbrev");
La unión siguiente devuelve los estados de la costa oriental de Estados Unidos que tienen al menos tres accidentes geográficos:
SELECT ecs.state_name, f.feature_class, COUNT(*) FROM ddb_east_coast_states ecs JOIN ddb_features f on ecs.state_alpha = f.state_alpha GROUP BY ecs.state_name, f.feature_class HAVING COUNT(*) >= 3;
Unión de tablas de orígenes diferentes
En el siguiente ejemplo, s3_east_coast_states es una tabla de Hive asociada a un archivo CSV almacenado en Amazon S3. La tabla ddb_features está asociada con datos de DynamoDB. En el ejemplo siguiente se unen estas dos tablas y se devuelven los accidentes geográficos de los estados cuyos nombres comienzan por "New".
create external table s3_east_coast_states (state_name STRING, state_alpha STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION 's3://
bucketname
/path
/subpath
/';
SELECT ecs.state_name, f.feature_name, f.feature_class FROM s3_east_coast_states ecs JOIN ddb_features f ON ecs.state_alpha = f.state_alpha WHERE ecs.state_name LIKE 'New%';