任何人都可以告诉:有可能通过固定偏移量创建配置单元表和单独的值。 例如,文件: col1 col2 col3 在这种情况下,表中的第一列为1-4个字符,第二列为5-8个字符,第三个为8-12个字符。Hive字段分隔符作为固定偏移量
非常感谢!
任何人都可以告诉:有可能通过固定偏移量创建配置单元表和单独的值。 例如,文件: col1 col2 col3 在这种情况下,表中的第一列为1-4个字符,第二列为5-8个字符,第三个为8-12个字符。Hive字段分隔符作为固定偏移量
非常感谢!
我已经解决了类似的问题是这样的:
考虑换行分隔行,固定偏移列输入,
首先将数据输入一列一个表,一个字符串
然后通过任一个Java类或经由流式传输的hadoop一个Python模块,即采用在一行,并返回多个字段:
import sys
for line in sys.stdin:
# line will have a newline on the end you don't want
line = line.strip()
output = []
output.append(line[:4])
output.append(line[4:8])
output.append(line[8:12])
print '\t'.join(output)
你的蜂房小号CRIPT看起来就像这样:
CREATE TABLE IF NOT EXISTS input_raw(line STRING);
LOAD DATA LOCAL INPATH '${hiveconf:input}' OVERWRITE INTO TABLE input_raw;
CREATE TABLE IF NOT EXISTS processed_data(
field1 STRING,
field2 STRING
field3 STRING);
delete FILE processing.py;
add FILE processing.py;
INSERT INTO TABLE processed_data
SELECT
TRANSFORM (line)
USING 'python processing.py'
AS(field1, field2, field3)
FROM input_raw;
DROP TABLE input_raw;
你也可以避免流和python和所有的跟随你的方法,但使用蜂巢SUBSTR()
CREATE TABLE IF NOT EXISTS input_raw(line STRING);
LOAD DATA LOCAL INPATH '${hiveconf:input}' OVERWRITE INTO TABLE input_raw;
CREATE TABLE IF NOT EXISTS processed_data(
field1 STRING,
field2 STRING
field3 STRING);
INSERT INTO TABLE processed_data
SELECT
substr(line,1,4) as field1,
substr(line,5,4) as field2,
substr(line,9,4) as field3
FROM input_raw;
DROP TABLE input_raw;
我希望我已经看过当我还在那个项目中:) – 2017-06-15 05:56:22
https://groups.google.com/ a/cloudera.org/forum /?fromgroups =#!topic/cdh-user/9xvU0RyqKPA – 2013-03-05 01:32:59
http://stackoverflow.com/questions/1309700/regex-for-fixed-width-field – 2013-03-05 01:34:18