【问题标题】:Create Hive table on top of data created in Spark在 Spark 中创建的数据之上创建 Hive 表
【发布时间】:2016-12-10 03:26:24
【问题描述】:

我在 Spark 下创建了 ORC 格式的数据,如下所示:

var select: String = "SELECT ..."
sqlContext.sql(select).write.format("orc").save("/tmp/out/20160101")
select = "SELECT ..."
sqlContext.sql(select).write.format("orc").save("/tmp/out/20160102")
& so on...

现在我正在尝试在 Hive 中创建一个外部表,如下所示:

CREATE EXTERNAL TABLE `mydb.mytable`
 (`col1` string, 
  `col2` decimal(38,0), 
  `create_date` timestamp, 
  `update_date` timestamp)
  PARTITIONED BY (`my_date` string)
  STORED AS ORC
  LOCATION '/tmp/out/';

当我这样做时:

"select count(*) from mydb.mytable"

我得到计数​​值为 0。 但是在 Spark-shell 下,当我运行时:

val results = sqlContext.read.format("orc").load("/tmp/out/*/part*")
results.registerTempTable("results")
sqlContext.sql("select count(*) from results").show

我按预期获得了 500,000 行。

似乎“分区”没有被识别或其他东西。如何在 Spark 中创建的数据之上创建“外部”Hive 表?

【问题讨论】:

  • 您告诉 hive 在 /tmp/out/my_date=<date> 中查找数据,但在 spark 中您正在保存到 /tmp/out/<date>
  • 嗯...如何告诉 Hive 查看 /tmp/out/ 而不是 /tmp/out/my_date= ?我宁愿不改变输出位置。
  • 据我所知你没有。 <column_name>=<value> 是 hive 分区目录名称的格式。更改 spark 的输出以符合此要求。

标签: scala hadoop apache-spark hive orc


【解决方案1】:

Hive 不会自动查找新分区。创建新分区后,您需要更新配置单元表。一个分区被创建并添加到 hive 表中,您可以根据需要在该分区中添加和删除文件,这些更改将立即反映,而无需更新元存储。

您可以使用ALTER TABLE 查询在元存储中创建新分区。

ALTER TABLE mydb.mytable 
ADD PARTITION (my_date='20160101')
LOCATION '/tmp/out/20160101'

您需要对每个输出目录执行此查询,以便 Hive 将它们拾取。

但是,Hive 对其分区 <column_name>=<value> 有一个标准命名约定。使用这种命名方案有几个优点。首先,您可以从ALTER TABLE 查询中省略LOCATION 子句,但它也允许您使用不同的查询:MSCK REPAIR TABLE <table_name>,它将所有目录作为分区添加到元存储中。如果您想一次添加多个分区,这很有用,这意味着您不需要知道要添加的所有分区列的值。

【讨论】:

  • 不。 /tmp/out/my_date=20160101 对我不起作用。我将尝试更改表并查看。
  • 这有效:ALTER TABLE mydb.mytable ADD PARTITION (my_date=20160101) LOCATION '/tmp/out/20160101';请修正您的答案中的错字。谢谢。
  • 实际上,将`(刻度)放在日期周围是行不通的,但 my_date=20160101 有效。 YMMV。
  • 抱歉,我误解了 hive 的工作原理。我已经用更多信息更新了我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-14
  • 1970-01-01
  • 1970-01-01
  • 2016-04-08
  • 2018-04-08
相关资源
最近更新 更多