我的数据如下:
id,name,description,category
1,sid,I am don,right?,production
我遵循了这个链接中提供的步骤。主要的问题是当我将数据插入temp表时 3rd column
被分离并被推到第四列,即当它看到 ","
之前 right
word它将数据分割并将其推入下一列。这是因为我得到的是csv格式的数据,因此将分隔符作为 ","
创建临时表时。所以,这里一团糟。我怎样才能解决它??
按照 xenodevil
,我运行了下面的查询,发现错误:
insert into perTable select * from sampleTable;
其中sampletable是temp表,pertable是orc表,sampletable数据如下:
+-----------------+-------------------+--------------------------+-----------------------+--+
| sampletable.id | sampletable.name | sampletable.description | sampletable.category |
+-----------------+-------------------+--------------------------+-----------------------+--+
| 1 | sid | I am don,right? | production |
+-----------------+-------------------+--------------------------+-----------------------+--+
但得到以下错误:
ERROR : Status: Failed
ERROR : Vertex failed, vertexName=Map 1, vertexId=vertex_1560140822404_0022_1_00, diagnostics=[Task failed, taskId=task_1560140822404_0022_1_00_000000, diagnostics=[TaskAttempt 0 failed, info=[Error: Failure while running task:java.lang.RuntimeException: java.lang.RuntimeException: org.apache.hadoop.hive.ql.metadata.HiveException: Hive Runtime Error while processing row {"id":"1","name":"sid","description":"I am don,right?","category":"production"}
at org.apache.hadoop.hive.ql.exec.tez.TezProcessor.initializeAndRunProcessor(TezProcessor.java:173)
at org.apache.hadoop.hive.ql.exec.tez.TezProcessor.run(TezProcessor.java:139)
那么这里的问题是什么??
2条答案
按热度按时间knpiaxh11#
可以使用此示例流在配置单元表中加载数据。
1) 因为有歧义
,
分隔符,更新文件以使其具有分隔符|
标识实际字段的。所以,文件看起来像这样。我们称之为data.csv
.2) 在中创建表
Hive
,指定正确的列分隔符。3) 从本地文件加载数据
4) 查看数据
ipakzgxi2#
你将如何确定第三列有多少逗号?如果它可以包含任何文本,那么它可以包含任意数量的逗号。这必须在文件生成级别进行控制,即在写入数据时,而不是在以后尝试以csv格式读取数据时。在生成cvs文件时,您可以
在作为数据一部分的每个逗号前放置转义字符,而不是逗号分隔符
将每列的文本用双引号括起来
仅用双引号将存在分隔符(逗号)的列括起来
这些是可靠解决此类问题的一些常见做法。
一种不可靠的方法是使用下面的regexserde作为行格式,这种方法非常特定于您提供的数据,并且只会解析第3列中的冗余逗号
要设置此值,需要将表的ddl修改为:
我在这里检查了regex,但是您需要调整ddl语法以满足您的需要。