58

Cloudera のバージョンの Hive を使用しており、最初の列に列名を含む csv ファイルに対して外部テーブルを作成しようとしています。これが私がそれを行うために使用しているコードです。

CREATE EXTERNAL TABLE Test ( 
  RecordId int, 
  FirstName string, 
  LastName string 
) 
ROW FORMAT serde 'com.bizo.hive.serde.csv.CSVSerde' 
WITH SerDeProperties (  
  "separatorChar" = ","
) 
STORED AS TEXTFILE 
LOCATION '/user/File.csv'

サンプルデータ

RecordId,FirstName,LastName
1,"John","Doe"
2,"Jane","Doe"

誰かが最初の行をスキップする方法を手伝ってくれますか、それとも中間ステップを追加する必要がありますか?

4

8 に答える 8

24

ダニエルからの回答がありますが、以下を使用して可能なカスタマイズをいくつか示しますOpenCSVSerde

CREATE EXTERNAL TABLE `mydb`.`mytable`(
    `product_name` string,
    `brand_id` string,
    `brand` string,
    `color` string,
    `description` string,
    `sale_price` string)
PARTITIONED BY (
    `seller_id` string)
ROW FORMAT SERDE
    'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
    'separatorChar' = '\t',
    'quoteChar' = '"',
    'escapeChar' = '\\')
STORED AS INPUTFORMAT
    'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
    'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
    'hdfs://namenode.com:port/data/mydb/mytable'
TBLPROPERTIES (
    'serialization.null.format' = '',
    'skip.header.line.count' = '1')

これにより、区切り文字、引用符、エスケープ文字、null 処理、およびヘッダー処理を完全に制御できます。

ここここを見てください。

于 2016-09-16T06:17:47.460 に答える
4

skip.header.line.countヘッダー行をスキップします。

ただし、テーブルにアクセスする外部ツールがある場合は、それらの行をスキップせずに実際のデータが表示されます

于 2016-03-09T20:58:03.137 に答える
2
create external table table_name( 
Year int, 
Month int,
column_name data_type ) 
row format delimited fields terminated by ',' 
location '/user/user_name/example_data' TBLPROPERTIES('serialization.null.format'='', 'skip.header.line.count'='1');
于 2015-06-19T06:55:53.437 に答える
0

私もこれに苦労し、Greenplumなどにあるように、ハイブに最初の行をスキップするように指示する方法が見つかりませんでした。そのため、最終的にファイルから削除する必要がありました。例: "cat File.csv | grep -v RecordId > File_no_header.csv"

于 2013-11-26T12:46:24.223 に答える