46

由于这是来自新手...

我已经为我设置了 Hadoop 和 Hive,因此我可以在我的计算机上运行 Hive 查询来访问 AWS 集群上的数据。我可以像使用 MS SQL Server 一样使用存储在我的计算机上的 .csv 数据运行 Hive 查询吗?

那么如何将 .csv 数据加载到 Hive 中?它与 Hadoop 有什么关系,我应该运行哪种模式?

我应该关心哪些设置,以便如果我做错了什么,我可以随时返回并在亚马逊上运行查询,而不会影响之前为我设置的内容?

4

6 回答 6

54

让我通过以下简单的步骤帮助您:

脚步:

首先,使用 csv 文件中的字段名称在 hive 上创建一个表。例如,您的 csv 文件包含三个字段(id、name、salary),并且您想在 hive 中创建一个名为“staff”的表。使用以下代码在 hive 中创建表。

hive> CREATE TABLE Staff (id int, name string, salary double) row format delimited fields terminated by ',';

其次,既然您的表是在 hive 中创建的,让我们将 csv 文件中的数据加载到 hive 上的“staff”表中。

hive>  LOAD DATA LOCAL INPATH '/home/yourcsvfile.csv' OVERWRITE INTO TABLE Staff;

最后,在 hive 上显示“Staff”表的内容以检查数据是否已成功加载

hive> SELECT * FROM Staff;

谢谢。

于 2015-09-26T08:21:54.750 回答
17

if you have a hive setup you can put the local dataset directly using Hive load command in hdfs/s3.

You will need to use "Local" keyword when writing your load command.

Syntax for hiveload command

LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]

Refer below link for more detailed information. https://cwiki.apache.org/confluence/display/Hive/LanguageManual%20DML#LanguageManualDML-Loadingfilesintotables

于 2013-10-11T15:28:50.447 回答
15

还有另一种启用此功能的方法,

  1. 使用 hadoop hdfs -copyFromLocal 将 .csv 数据文件从本地计算机复制到 HDFS 中的某个位置,例如“/path/filename”

  2. 进入 Hive 控制台,运行以下脚本从文件中加载,使其成为 Hive 表。注意 '\054' 是 'comma' 八进制数的 ascii 码,代表字段分隔符。


CREATE EXTERNAL TABLE table name (foo INT, bar STRING)
 COMMENT 'from csv file'
 ROW FORMAT DELIMITED FIELDS TERMINATED BY '\054'
 STORED AS TEXTFILE
 LOCATION '/path/filename';
于 2013-10-14T00:43:58.870 回答
9

对于 csv 文件格式数据将采用以下格式

"column1", "column2","column3","column4"

如果我们将使用以“,”结尾的字段,那么每一列都会得到如下值。

"column1"    "column2"     "column3"     "column4"

此外,如果任何列值具有comma作为值,那么它根本不起作用。

所以创建表的正确方法是使用 OpenCSVSerde

create table tableName (column1 datatype, column2 datatype , column3 datatype , column4 datatype)
ROW FORMAT SERDE 
'org.apache.hadoop.hive.serde2.OpenCSVSerde' 
STORED AS TEXTFILE ;
于 2017-12-09T19:27:21.150 回答
6

您可以试试这个,以下是一些关于如何生成文件的示例。工具——https: //sourceforge.net/projects/csvtohive/?source=directory

  1. 使用浏览选择一个 CSV 文件并设置 hadoop 根目录,例如:/user/bigdataproject/

  2. 工具使用所有 csv 文件生成 Hadoop 脚本,以下是生成的 Hadoop 脚本示例,用于将 csv 插入 Hadoop

    #!/bin/bash -v
    hadoop fs -put ./AllstarFull.csv /user/bigdataproject/AllstarFull.csv hive -f ./AllstarFull.hive

    hadoop fs -put ./Appearances.csv /user/bigdataproject/Appearances.csv hive -f ./Appearances.hive

    hadoop fs -put ./AwardsManagers.csv /user/bigdataproject/AwardsManagers.csv hive -f ./AwardsManagers.hive

  3. 生成的 Hive 脚本示例

    CREATE DATABASE IF NOT EXISTS lahman;
    USE lahman;
    CREATE TABLE AllstarFull (playerID string,yearID string,gameNum string,gameID string,teamID string,lgID string,GP string,startingPos string) row format delimited fields terminated by ',' stored as textfile;
    LOAD DATA INPATH '/user/bigdataproject/AllstarFull.csv' OVERWRITE INTO TABLE AllstarFull;
    SELECT * FROM AllstarFull;

谢谢维杰

于 2015-07-13T14:45:33.173 回答
0

只有在以下情况下,您才能将本地 CSV 文件加载到 Hive:

  1. 您正在从 Hive 集群节点之一执行此操作。
  2. 您在非集群节点上安装了 Hive 客户端并使用hiveorbeeline进行上传。
于 2018-09-19T13:46:04.777 回答