2017-07-18 2 views
1

私はこのリンクを参照しました:http://docs.aws.amazon.com/emr/latest/ReleaseGuide/EMR_Hive_Commands.htmlHiveを使用してDynamodbをS3にエクスポート

マイハイブスクリプトは以下のようなものです:

DROP TABLE IF EXISTS hiveTableName; 
CREATE EXTERNAL TABLE hiveTableName (item map<string,string>) 
STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' 
TBLPROPERTIES ("dynamodb.table.name" = "test_table", "dynamodb.region"="us-west-2"); 

DROP TABLE IF EXISTS s3TableName; 
CREATE EXTERNAL TABLE s3TableName (item map<string, string>) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' 
LOCATION 's3://bucket/test-hive2'; 

SET dynamodb.throughput.read.percent=0.8; 

INSERT OVERWRITE TABLE s3TableName SELECT * 
FROM hiveTableName; 

DynamoDBのテーブルが正常にS3にエクスポートすることができますが、ファイル形式はJSONではない、それはのようである:

uuid{"s":"db154955-8555-4b49-bf40-ee36605ac510"}num{"n":"1294"}info{"s":"qwefjdkslafjdafl"} 
uuid{"s":"d9898564-2b56-42ba-9cfb-fd092e7d0b8d"}num{"n":"100"}info{"s":"qwefjdkslafjdafl"} 

誰かが方法を知っていますJSON形式でエクスポートするには?データパイプラインを使用できることは知っていますが、dynamodbテーブルをJSON形式のS3にエクスポートできますが、何らかの理由でEMRを使用する必要があります。私は別のツールを試みた:https://github.com/awslabs/emr-dynamodb-connectorを、そしてコマンドを使用します。

java -cp target/emr-dynamodb-tools-4.2.0-SNAPSHOT.jar org.apache.hadoop.dynamodb.tools.DynamoDBExport /where/output/should/go my-dynamo-table-name 

をしかし、エラーが

Error: Could not find or load main class org.apache.hadoop.dynamodb.tools.DynamoDBExport 

誰かがどのようにこれらの問題を解決するために教えてもらえますでしたか?ありがとう。

==更新==

私はto_jsonをを使用している場合は、クリスが示唆したように、私のコードは以下の通りである:私は、生成されたファイルを見てみると

DROP TABLE IF EXISTS hiveTableName2; 
CREATE EXTERNAL TABLE hiveTableName2 (item map<string, string>) 
STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' 
TBLPROPERTIES ("dynamodb.table.name" = "test_table", "dynamodb.region"="us-west-2"); 

DROP TABLE IF EXISTS s3TableName2; 
CREATE EXTERNAL TABLE s3TableName2 (item string) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' 
LOCATION 's3://backup-restore-dynamodb/hive-test'; 

INSERT OVERWRITE TABLE s3TableName2 SELECT to_json(item) 
FROM hiveTableName2; 

、それは

{"uuid":"{\"s\":\"db154955-8555-4b49-bf40-ee36605ac510\"}","num":"{\"n\":\"1294\"}","info":"{\"s\":\"qwefjdkslafjdafl\"}"} 
ようなものです

ネストされたマップは、

map<string, map<string, string>> 

はない

map<string, string> 

誰かが私にいくつかの提案を与えることはできますか?ありがとう。

答えて

0

SELECT *クエリでは、Hive mapのシリアル化された形式が発行されていますが、これはJSONであることは保証されていません。 Hive UDFのBrickhouseを使用することを検討してください。特に、to_json関数を呼び出すと、出力にJSON形式を保証するのに適しています。 to_jsonを

  • - JSON
  • に任意のハイブ構造(リスト、マップ、named_struct)に変換
INSERT OVERWRITE TABLE s3TableName SELECT to_json(item) 
FROM hiveTableName; 
+0

あなたにクリスをありがとう!しかし、私はまだ問題がある、更新された質問を参照してください。 –

関連する問題