【问题标题】:Spark, can't get create table with partitions, but no partitions worksSpark,无法创建带有分区的表,但没有分区有效
【发布时间】:2018-12-21 02:51:02
【问题描述】:

我的数据结构是这样的

/mnt/path/db/table/keya=01/keyb=123
/mnt/path/db/table/keya=01/keyb=124
/mnt/path/db/table/keya=02/keyb=123

这个表的创建成功了

CREATE EXTERNAL TABLE `test_table_a`(
..irrelevant schema..
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\u0001'
STORED AS INPUTFORMAT
  'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  '/mnt/path/db/table/keya=0101/keyb=123'

然后

select count(*) from test_table_a;
//returns
1876 
//correct

我可以查询数据就好了,但是我想要一个分区表。

我试过了

CREATE EXTERNAL TABLE `test_table_a`(
..irrelevant schema..
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\u0001'
STORED AS INPUTFORMAT
  'org.apache.hadoop.mapred.TextInputFormat'
PARTITIONED BY (
  `keya` string,
  `keyb` string)
OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  '/mnt/path/db/table'

还有这个

CREATE EXTERNAL TABLE `test_table_a`(
..irrelevant schema..
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\u0001'
STORED AS INPUTFORMAT
  'org.apache.hadoop.mapred.TextInputFormat'
PARTITIONED BY (
  `keya` string,
  `keyb` string)
OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  '/mnt/path/db/table/keya=*/keyb=*'

但是,在这两个上我都得到了这个结果

select count(*) from test_table_a;
//returns
0 
show partitions test_table_a;
//returns
//nothing

【问题讨论】:

    标签: sql apache-spark hive apache-spark-sql databricks


    【解决方案1】:

    当您在 location 之上创建一个外部分区表(数据已经存在于该位置),所以在您的 hive shell 中执行以下命令

    hive> msck repair table <db.name>.<table_name>;
    

    检查您是否能够看到 test_table_a 表中的分区信息和数据。

    创建表语句:

    CREATE EXTERNAL TABLE `test_table_a`(
    ..irrelevant schema..
    )
    ROW FORMAT DELIMITED
    FIELDS TERMINATED BY '\u0001'
    STORED AS INPUTFORMAT
      'org.apache.hadoop.mapred.TextInputFormat'
    PARTITIONED BY (
      `keya` string,
      `keyb` string)
    OUTPUTFORMAT
      'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
    LOCATION
      '/mnt/path/db/table';
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-03
      • 1970-01-01
      • 1970-01-01
      • 2015-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多