hive字段delimeter作为固定偏移量

elcex8rz  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(381)

这个问题在这里已经有答案了

固定宽度字段的正则表达式(2个答案)
7年前关门了。
谁能告诉我:有可能创建配置单元表并通过固定偏移量分离值。例如,file:col1 col2 col3在本例中,表的第一列是1-4个字符,第二列是5-8个字符,第三列是8-12个字符。
谢谢!

lmyy7pcs

lmyy7pcs1#

您还可以按照您的方法避免流式处理和python以及所有这些,但是使用hivesubstr()

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;
kyvafyod

kyvafyod2#

我用这种方法解决了类似的问题:
给定换行分隔行、固定偏移列的输入,
首先将数据输入到一个包含一列的表中,一个字符串
然后通过流式hadoop传递java类或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)

您的配置单元脚本将如下所示:

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;

相关问题