2013-06-27 2 views
2

У меня в облаке, внутри ведра S3, файл CSV с некоторыми данными.Создание таблиц DynamoDB с использованием Hive

Я хотел бы экспортировать эти данные в таблицу DynamoDB со столбцами «ключ» и «значение».

Вот текущий улей сценарий я написал:

CREATE EXTERNAL TABLE FromCSV(key string, value string) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY ', ' 
LOCATION 's3://mybucket/output/';      

CREATE EXTERNAL TABLE hiveTransfer(col1 string, col2 string) 
STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' 
TBLPROPERTIES ("dynamodb.table.name" = "InvertedIndex", 
"dynamodb.column.mapping" = "col1:key,col2:value"); 

INSERT OVERWRITE TABLE hiveTransfer SELECT * FROM FromCSV; 

Сейчас, в основном скрипт работает. хотя я хотел бы внести некоторые изменения в этот скрипт следующим образом:

1) Скрипт работает только в том случае, если таблица «InvertedIndex» уже существует в DynamoDB, я хотел бы, чтобы скрипт создавал новую таблицу сам по себе, а затем помещал данные, как это уже делается.

2) В CSV ключ всегда является строкой, но у меня есть 2 типа значений, строка или целое число. Я хотел бы, чтобы сценарий различал два и делал две разные таблицы.

Любая помощь с этими двумя модификациями будет назначена. Спасибо

ответ

3

Привет, это может быть выполнено, но это не тривиальный случай.

1) Для создания таблицы динамо, которая не может быть выполнена кустом, поскольку таблицы Dynamo управляются облаком Amazon. Одна вещь, которая приходит мне в голову, - создать Hive UDF для создания таблицы динамо и вызвать ее внутри некоторого фиктивного запроса перед запуском вставки. Например:

SELECT CREATE_DYNO_TABLE() FROM dummy; 

Где в фиктивной таблице имеется только одна запись.

2) Вы можете разделить загрузку на два запроса, в которых в одном запросе вы будете использовать оператор RLIKE и [0-9] + регулярное выражение для определения числовых значений и другого просто отрицания этого.

НТН, Dino

+0

Дино, большое спасибо :)! Можете ли вы просто написать мне пример запроса, который мне нужен в номере 2? (возможно, на основе моего сценария) ... – DanielY

+0

SELECT * from FromCSV WHERE value RLIKE '[0-9] +' –

+0

звучит великолепно Спасибо дино :) – DanielY