Таблицы улья не создаются атомарно, когда вы загружаете данные в HDFS. Это то, что вам нужно сделать вручную или программно из вашего приложения. Команда для создания (внешние) Hive таблицы в основном:
hive> create external table <table_name> (param_1_name param_1_type, ...) row format delimited fields terminated by ',' location '/user/<your_hdfs_user>/path/to/the/data/directory/';
выше для структурированных данных в CSV-формате, например. Если данные записаны в JSON, вам нужно будет использовать serde.
Говорят, что после создания таблиц Hive очень простой способ добавить новые данные в таблицы - это загрузить такие данные в HDFS напрямую. Это можно сделать через WebHDFS. Например, если вы хотите добавить файл в HDFS папку таблицы Hive указывает на (с использованием curl
в Http Cient):
$ curl -i -X PUT "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=CREATE
[&overwrite=<true |false>][&blocksize=<LONG>][&replication=<SHORT>]
[&permission=<OCTAL>][&buffersize=<INT>]"
Вы получите Перенаправление, что необходимо соблюдать:
HTTP/1.1 307 TEMPORARY_REDIRECT
Location: http://<DATANODE>:<PORT>/webhdfs/v1/<PATH>?op=CREATE...
Content-Length: 0
Таким образом, выполнить PUT на перенаправление URL:
curl -i -X PUT -T <LOCAL_FILE> "http://<DATANODE>:<PORT>/webhdfs/v1/<PATH>?op=CREATE..."
(BTW, curl
может автоматически следовать переназначения, если вы используете опцию -L
).
После создания файла вы можете добавить новые данные в уже существующий файл, используя метод POST (op=append
, как указано в документации).
HTH
привет спасибо за ваш ответ! но как насчет вставки данных с помощью Hive? каждая вставка перепишет всю таблицу? или просто добавить новую строку в конце файла? заранее спасибо –
AFAIK, Hive готов к вставкам из версии 0.14.0. До этого мое впечатление было сосредоточено на Hive на использовании данных, которые были обновлены путем добавления к базовым файлам HDFS. Кроме того, таблицы могут быть созданы из результатов запроса. Проверьте: https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DML#LanguageManualDML-InsertingvaluesintotablesfromSQL – frb