2013-07-30 113 views
1

從具有管分隔符的巨大文件創建包含大量列(字符串)(> 100)的Hive表的最佳方式是什麼?Hive創建包含大量列的表

  1. 如果我在create table命令中提到超過100個列名,會出現問題嗎?
  2. 如果我決定不想命名每個列,我可以a)根本不提及列名稱,並讓Hive按照其默認命名命名列名稱。我該怎麼做b)提及只有一些列表示第一個10.在這種情況下剩餘列會發生什麼? 我試着這樣說:

    CREATE EXTERNAL TABLE IF NOT EXISTS table1 
    ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' 
    LOCATION 'folder1/folder2/folder3/filename'; 
    

我得到一個錯誤說「列列出或應指定自定義序列」。我需要一個自定義序列化程序嗎? 如果外部表沒有分區,我該如何添加分區?

+0

你可以在apache drill或impala中做到這一點 – nir

+0

如果你創建一個只有一個字符串列的導入表,並以這種方式引用文件,它可能會工作。然後,您可以使用'create table as'語句來執行一個查詢,該查詢使用可能的split來從字符串中生成數組,然後使用explode語句將其轉換爲表格。雖然從這裏拍攝臀部...... – LiMuBei

回答

-1
  1. 爲配置單元中的表創建創建通用腳本。 這裏採取的分隔符,路徑,表名和模式使用動態hiveconf

    創建表$ {hiveconf:表名}($ {hiveconf:模式})通過 '$ {hiveconf:分隔符}' 終止 行格式分隔的字段 位置'$ {hiveconf:location}';

  2. 寫一個外殼腳本用於運行上述腳本

    蜂房-hiveconf表名= $ 1 -hiveconf架構= $ 16 -hiveconf定界符= $ 3 -hiveconf位置= $ 4 -f abovefilpath.q

3.pass參數shell腳本,運行shell腳本

sh secondstepshellscriptpath urtblname schema details urdelimiter hdfspath 

用上面的方法,你可以創建一個表的任何數量的列,這是非常reusab樂。

在這裏,您有一些其他的工具,這將產生輸出類似下面準備模式..

"col1 string,sol2 string,col3 string,col4 string etc..." 

例如,你可以通過從user.And可以在拍攝的列數動態生成上述shell腳本中輸出直接從第二步直接傳遞該模式。

+1

這並不能回答他的任何一個問題。這種方法只能讓一個人避免輸入部分命令語法來創建一個表。 –

+0

增加額外的信息,關於我的意思 –

+0

OP不問如何減少他的寫作創建語句的工作。他在問如何以部分結構化或非結構化的方式來定義它。 –