使用Athena查询DynamoDB备份并将结果存储到S3上

0

【以下的问题经过翻译处理】 我尝试读取DynamoDB的S3备份,但是出现了各种错误。

数据看起来像这样:

{"SensorId":{"s":"sensor-10"},"Temperature":{"n":"63.85"},"CurrentTime":{"n":"1661540734"}}
{"SensorId":{"s":"sensor-10"},"Temperature":{"n":"63.84"},"CurrentTime":{"n":"1661540736"}}

我尝试了以下操作,成功了,但是查询失败了:

CREATE EXTERNAL TABLE IF NOT EXISTS sensor_data_presto (
    sensorID    struct<s:string>,
    temperature struct<n:float>,
    currentTime struct<n:bigint>
  )
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
LOCATION 's3://bucket-name/';

以下查询会出现以下错误:

SELECT DISTINCT sensorID.s
FROM sensor_data_presto;

Row is not a valid JSON Object - JSONException: A JSONObject text must end with '}' at 39 [character 40 line 1]

我还尝试了以下操作,成功了,但是查询失败了:

CREATE EXTERNAL TABLE IF NOT EXISTS `mydatabase`.`sensor_data_regex` (
  sensorid string,
  temperature float,
  currenttime bigint
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' 
WITH SERDEPROPERTIES (
 'input.regex'='/^\{"SensorId":\{"s":("[a-z]*-[0-9]*"){1}\},"Temperature":\{"n":"([0-9]*[\.]?[0-9]*)"\}{1},"CurrentTime":\{"n":"([0-9]*){1}"\}\}$/g'
) LOCATION 's3://bucket-name/'
TBLPROPERTIES ('has_encrypted_data'='false');

我尝试过使用和不使用开头的/和结尾的/g。我尝试过带上和不带上结尾$。

以下查询会出现以下错误:

SELECT * FROM sensor_data_regex;

PatternSyntaxException thrown initializing deserializer org.apache.hadoop.hive.serde2.RegexSerDe. Cause: Illegal repetition near index 1 /^{"SensorId":{"s":("[a-z]*-[0-9]*"){1}},"Temperature":{"n":"([0-9]*[.]?[0-9]*)"}{1},"CurrentTime":{"n":"([0-9]*){1}"}}$/g ^

我试图复制《七周内七个数据库,第二版》一书中第 7 章:DynamoDB 中的示例,供我的大学课堂上使用。在使用 Athena 的最后一步之前,我能够更新整个管道以在 AWS 上运行。如果能提供有关更正这些错误或完成查询 DynamoDB 数据的管道(具有成本效益)的建议,我将不胜感激。

profile picture
EXPERTE
gefragt vor 6 Monaten42 Aufrufe
1 Antwort
0

【以下的回答经过翻译处理】 请再次检查您定义的S3桶中的路径中,是否含有其他不规范的文件,如有请删除后再次执行Athena的命令;您需要转义所有正则表达式元字符,请再次检查您定义的Table的通配符。

profile picture
EXPERTE
beantwortet vor 6 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen