当前位置: 首页 > 知识库问答 >
问题:

如何改变一个现有的增量表的分区?

仉姚石
2023-03-14

我在Databricks delta中有一个表,它是按< code>transaction_date分区的。我想将分区列更改为< code>view_date。我尝试删除该表,然后使用< code > PARTITIONED BY(view _ date)创建一个新的分区列。

然而,我的尝试失败了,因为实际文件位于S3中,即使我删除了一个配置单元表,分区也保持不变。是否有任何方法可以更改现有Delta表的分区?或者唯一的解决方案是删除实际数据并用新指示的分区列重新加载它?

共有2个答案

文心思
2023-03-14

正如西尔维奥所指出的,没有必要放弃谈判。事实上,databricks强烈推荐的方法是替换表。

https://docs.databricks.com/sql/language-manual/sql-ref-syntax-ddl-create-table-using.html#parameters

在火花 SQL 中,这可以通过以下方式
轻松完成

REPLACE TABLE <tablename>
  USING DELTA
  PARTITIONED BY (view_date)
AS
 SELECT * FROM <tablename>

修改示例来自:
https://docs.databricks.com/delta/best-practices.html#replace-表的内容顺序模式

彭仲卿
2023-03-14

实际上,无需删除表或删除文件。您需要做的就是读取当前表,覆盖内容和架构,然后更改分区列:

val input = spark.read.table("mytable")

input.write.format("delta")
  .mode("overwrite")
  .option("overwriteSchema", "true")
  .partitionBy("colB") // different column
  .saveAsTable("mytable")

更新:以前有一个关于时间旅行和分区变化的错误,现在已经修复。

 类似资料:
  • 如果我们有一个主题在Kafka,它有5个分区,我们可以增加到30个分区。另外,在增加分区的数量之后,我们按照代理ID的顺序更改每个分区的领导者,并为该特定主题重新平衡集群。我们怎么能那样做?

  • 问题内容: 我在Javascript中有一组全局计数器变量: 等等 然后,我有了一个Javascript函数,该函数接受一个映射到这些全局计数器的“索引”数字。在此函数内部,我需要使用传递给该函数的“索引”值来读写这些全局计数器。 我希望它如何工作的示例,但当然根本不起作用: 我希望我要实现的目标是明确的。如果没有,我会尽力澄清。谢谢。 编辑说明: 我不是要增加计数器的名称,而是要增加计数器包含的

  • 问题内容: 我在可变字符串中定义了一个大写字母,我想输出字母表中的下一个和上一个字母。例如,如果变量等于,我将要输出和。 问题答案: 单程:

  • 我在ADLS gen2中有拼花格式的数据。我想在我的项目中实现dalta层。所以我将ADLS Gen2中的所有本地数据通过ADF保存在一个名为着陆区的单独容器中。 现在我创建了一个名为青铜的分离容器,我想在其中保留增量表。为此,我做了如下。我用数据砖创建了一个数据库。我使用下面的SQL代码在数据块中创建了一个增量表。 现在我的表没有任何数据。 如何将数据湖登陆区中的数据添加到我创建的增量表中。 将

  • 问题内容: 您好,可能是一个非常简单的问题,但是.. 当使用matplotlib.pyplot绘制图形时,我的Y轴从-0.04变为0.03,这很好,但是有8个增量标签(例如0.03、0.02、0.01等)。我可能需要16个左右。 谢谢你的帮助 问题答案: 使用改变刻度位置。例如: 是另一种选择。 (来源:stevetjoa.com)

  • 我使用了curly-curly with和,如rlang公告中所述。但是我不能让它在适当的地方变异一个变量时工作。目前用DPLYR做这件事的最好方法是什么?