我是hive的新手,我想在空格分隔的数据上使用它。是否有预先存在的方法来将它组合在一起用引号(“”)组合起来?
答案 0 :(得分:2)
Tariq上面提到了一种方法。 另一个是定义正则表达式。
您可以根据需要
让我们看一下这个例子:
对于Apache访问日志,有以下格式的示例数据:
10.243.31.1 - - [23/Aug/2013:16:38:07 +0530] "POST /Haas/controller/main.php HTTP/1.1" 200 26 "http://10.232.5.169:81/Haas/view/dashboard.php" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36"
10.243.31.1 - - [23/Aug/2013:16:38:07 +0530] "POST /Haas/controller/main.php HTTP/1.1" 200 31 "http://10.232.5.169:81/Haas/view/dashboard.php" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36"
10.243.31.1 - - [23/Aug/2013:16:38:13 +0530] "POST /Haas/controller/main.php HTTP/1.1" 200 31 "http://10.232.5.169:81/Haas/view/dashboard.php" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36"
现在我们要为它定义正则表达式,并将此数据存储到hive表中。 所以Hive表模式将是:
CREATE TABLE apache_log(
host STRING,
identity STRING,
user STRING,
time STRING,
request STRING,
status STRING,
size STRING,
referer STRING,
agent STRING)
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
"input.regex" = "([^ ]*) ([^ ]*) ([^ ]*) (-|\\[[^\\]]*\\]) ([^ \"]*|\"[^\"]*\") (-|[0-9]*) (-|[0-9]*)(?: ([^ \"]*|\"[^\"]*\") ([^ \"]*|\"[^\"]*\"))?",
"output.format.string" = "%1$s %2$s %3$s %4$s %5$s %6$s %7$s %8$s %9$s"
)
STORED AS TEXTFILE;
有关更多参考,请参阅GettingStarted#DDL_Operations
答案 1 :(得分:0)
我没有得到你问题的最后部分。加载空格分隔数据与加载任何其他字符分隔数据相同:
CREATE TABLE demo(f1 datatype,...,fn datatype)ROW 由'';
终止的格式删除字段