如何将数据从Hive表复制到本地系统?

时间:2013-07-09 14:10:13

标签: hive hiveql

我在Hive“sample”中创建了一个表,并在其中加载了一个csv文件“sample.txt”。

现在我需要将“sample”中的数据放入我的本地/opt/zxy/sample.txt。

我该怎么做?

4 个答案:

答案 0 :(得分:2)

Hortonworks' Sandbox允许您通过其HCatalog菜单执行此操作。否则,语法为

INSERT OVERWRITE LOCAL DIRECTORY '/tmp/c' SELECT a.* FROM b

根据Hive language manual

答案 1 :(得分:1)

由于您的目的只是将整个文件从HDFS复制到本地FS,因此我建议您不要通过Hive查询来执行此操作,原因如下:

  • 它将启动Mapreduce作业,这将比正常副本花费更多时间。
  • 它将创建具有不同名称(000000_0, 000001_0 and so on)的文件,这将要求您之后手动重命名该文件。
  • might在打开这些文件时遇到问题,因为它们没有任何扩展名。您的操作系统无法选择自行打开这些文件的应用程序。在这种情况下,您必须重命名文件或手动选择要打开它的应用程序。

要避免这些问题,您可以使用HDFS get command

bin/hadoop fs -get /user/hive/warehouse/sample/sample.txt /opt/zxy/sample.txt

简单易行。但是,如果您需要复制一些选定的数据,则必须使用Hive查询。

HTH

答案 2 :(得分:1)

我通常在命令行上通过Hive直接运行我的查询来处理这类事情,然后将其传递到本地文件中,如下所示:

hive -e 'select * from sample' > /opt/zxy/sample.txt

希望有所帮助。

答案 3 :(得分:0)

正在从Windows操作系统访问Hive的读者可以在Github上检出this script

这是一个Python + paramiko脚本,可将Hive数据提取到本地Windows OS文件系统中。