【问题标题】:Log file into Hive将文件记录到 Hive
【发布时间】:2014-04-14 12:27:30
【问题描述】:

我有一个日志文件“sample.log”,如下所示:

41 Texas 2000
42 Louisiana4 3211
43 Texas 5000
22 Iowa 4998p 

在日志文件中,第一列是 id,第二列是状态名称,第三列是数量。如果您看到州名,它有 Louisiana4,总销售额有 4998 便士。如何清理它以便我可以将其插入 Hive(使用 Python 或其他方式?)。可以请教一下步骤吗?

我想插入 Hive 表 tblSample:

表架构是:

CREATE  TABLE tblSample(
id int, 
state string, 
sales int)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE
LOCATION '/user/cloudera/Staging'
;

要将数据加载到 Hive 表中,我可以这样做:

load data local inpath '/home/cloudera/sample.log' into table tblSample;

谢谢!

【问题讨论】:

    标签: hadoop hive


    【解决方案1】:

    您可以将数据按原样加载到配置单元表中,然后使用 UDF 清理数据并加载到另一个表中。这将比 Python 高效得多,因为它将作为 mapr reduce 运行。

    【讨论】:

      【解决方案2】:

      我宁愿按原样存储数据,并在获取数据时进行清理。它会简单得多。无需外部代码。例如:

      hive> CREATE  TABLE tblSample( 
          > id string,
          > state string, 
          > sales string)
          > ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
          > STORED AS TEXTFILE
          > LOCATION '/user/cloudera/Staging';
      
      hive> select regexp_replace(state, "[0-9]", ""), regexp_replace(sales, "[a-z]", "") from tblSample;
      

      HTH

      【讨论】:

      • 我可以使用一些正则表达式命令清理日志文件本身的数据吗?
      • 使用适合您的 unix 实用程序,然后将文件加载到 Hive 表中。
      猜你喜欢
      • 1970-01-01
      • 2020-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-24
      • 2019-01-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多