【以下的问题经过翻译处理】 我尝试读取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 数据的管道(具有成本效益)的建议,我将不胜感激。