首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >作为固定偏移量的配置单元字段分隔符

作为固定偏移量的配置单元字段分隔符
EN

Stack Overflow用户
提问于 2013-03-05 02:45:29
回答 2查看 4.2K关注 0票数 2

有没有人知道:有没有可能通过固定的偏移量创建hive表和分隔值。例如,file: col1 col2 col3在这种情况下,表中的第一列是1-4个字符,第二列是5-8个字符,第三个是8-12个字符。

非常感谢!

EN

回答 2

Stack Overflow用户

发布于 2013-03-06 06:34:51

我已经用这种方式解决了类似的问题:

给定以新行分隔的行、固定偏移量的列的输入,

首先将数据输入到一个只有一列的表中

然后通过流式hadoop传递Java类或Python模块,它接受一行并返回多个字段:

代码语言:javascript
复制
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)

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

代码语言:javascript
复制
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;
票数 3
EN

Stack Overflow用户

发布于 2013-03-07 14:21:02

您也可以避免使用流和python等所有方法,但使用hive substr()

代码语言:javascript
复制
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;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15208757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档