【问题标题】:Hive: How to create a table in Hive from a .DAT file located in HDFS without knowing the SCHEMA of the .dat file?Hive:如何在不知道 .dat 文件的 SCHEMA 的情况下从位于 HDFS 中的 .DAT 文件在 Hive 中创建表?
【发布时间】:2018-09-18 13:15:28
【问题描述】:

我有一个包含 140 多列的 .DAT 文件。我想在 HIVE 中创建一个表并将该 .DAT 文件的数据导入该表中? 如何读取该 .DAT 文件的架构?文件位于我 cloudera VM 的 HDFS 中。

有没有办法在不提供表架构的情况下将该数据文件导入 hdfs?

【问题讨论】:

  • 数据在 dat 文件中的外观如何?你能贴几列吗?
  • 您可以将数据放入 HDFS 中,无需架构即可。然而,Hive 需要一个模式或至少一个定义的正则表达式模式

标签: hadoop hive


【解决方案1】:

.dat 文件是否有列标题?如果没有,您可以运行简单的脚本来计算文件中的列数(假设文件以逗号分隔,但可以将 F 更改为其他分隔符)

#hdfs
numcols=$( hadoop fs -cat my.DAT | awk -F"," '{ print NF }' | sort | uniq | sort -n -r | head -1 )
#local
    #numcols=$(awk -F"," '{ print NF }' my.DAT | sort | uniq | sort -n -r | head -1 )
    echo "create external table mydat(col1 STRING" > myddl.sql
    for (( i = 2; i <= $numcols; i++ )) 
    do 
           echo ",col${i} STRING" >> myddl.sql
    done
    echo ") output location xyz;" >> myddl.sql

【讨论】:

    猜你喜欢
    • 2017-08-29
    • 2017-09-24
    • 1970-01-01
    • 2020-07-28
    • 1970-01-01
    • 2015-08-27
    • 2014-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多