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

在Database ricks上的Delta Live Table上指定列名和架构

韶浩皛
2023-03-14

我正在使用sqlapi玩弄databricks delta活动表特性。这是我迄今为止的声明:

--Create Bronze Landing zone table
CREATE STREAMING LIVE TABLE raw_data
COMMENT "mycomment"
TBLPROPERTIES ("quality" = "bronze")
AS 
SELECT * FROM cloud_files('/mnt/path/here','csv', 
map(
'cloudFiles.inferColumnTypes','true',
'option.recursiveFileLookup','true', 
'header','false',
))

我的数据,它的读数没有标题,但我想让它使用inferSchema选项推断数据类型。但我需要以某种方式至少为它提供列名称。有一个选项可以为它提供一个显式架构,但是由于这是一个登陆表,我希望将这种开销的负担降到最低。spark文档非常稀疏,数据砖文档甚至更糟。有谁知道我是否可以做到这一点?

共有1个答案

微生翼
2023-03-14

注意-当您更新增量表模式时,从该表读取的流将终止。如果你想让数据流继续,你必须重新启动它。

Delta Lake 可以作为 DML 事务(追加或覆盖)的一部分自动更新表的架构,并使架构与正在写入的数据兼容。

Delta Lake自动验证正在写入的DataFrame的架构是否与表的架构兼容。Delta Lake使用以下规则来确定从DataFrame写入表是否兼容:

•所有DataFrame列都必须存在于目标表中。如果DataFrame中的列不存在于表中,则会引发异常。表中存在但不存在于DataFrame中的列设置为空。

•DataFrame列数据类型必须与目标表中的列数据类型匹配。如果不匹配,将引发异常。

•DataFrame列名不能仅因大小写而不同。这意味着不能在同一个表中定义“Foo”和“Foo”等列。虽然您可以在区分大小写或不区分大小写(默认)模式下使用Spark,但Parquet在存储和返回列信息时区分大小写。Delta Lake保留大小写,但在存储模式时不敏感,并具有此限制以避免潜在的错误、数据损坏或丢失问题。Delta Lake支持DDL显式添加新列,并支持自动更新模式。

如果您指定了其他选项,例如分区通过,并结合附加模式,Delta Lake会验证它们是否匹配,并因任何不匹配而抛出错误。当不存在分区通过时,会自动跟随存量数据的分区进行附加。

有关详细信息,请参阅此链接

 类似资料:
  • 问题内容: 这让我感到难过,并认为我会向SO社区提出帮助。 用户想要选择所有以特定ID开头的订单,例如: 123 将返回 123 , 12345 , 1238790 等ID然而int列。 我正在使用nHibernate,目前我的行是: 但这只会使我返回123。我可以执行Restrictions.Like,但是它将转换为SQL LIKE子句,并且在int col上不起作用。 有任何想法吗? 编辑:对

  • 问题内容: 我们希望对Seam EntityQuery接口和JPA模型中的2列进行排序。我们如何做到这一点? 问题答案: 如果您正在谈论,则此注释会将(目标实体的)逗号分隔属性的列表作为参数,并相应地对集合进行排序。例如,您的情况。 根据JPA 1.0规范: 9.1.28 OrderBy批注 的注释指定的集合的元素的顺序在点值的关联时的关联检索。 值排序元素的语法为orderby_list,如下所

  • 我正试图在Tomcat中添加JDBC会话持久性,正如这里所解释的:Tomcat链接我在Oracle中的my_schema数据库/schema中创建了一个会话表,并试图将其映射到Tomcat context.xml中。我的映射如下:

  • 问题内容: 因此,如果某些表缺少主键,则innodb的行为可能会导致问题。 因此,对于Hibernate,我正在寻找一个键来指定@ElementCollection表上的主键,并使用Set作为基础数据结构。 我找到了一种在地图上具有主键的方法,但这有点奇怪,因为我不需要地图。 我还找到了与@Embeddable相关的答案,但是我不需要那种复杂性。我在实体中使用Set或Set作为数据结构。 知道如何

  • 简短版本: 我正在尝试创建: ,其中项目是可嵌入的,并且能够定义在项目表中为地图键创建的列名。Hibernate版本:5.0.12。最终的 完整解释: 以下是一个简化的示例,它再现了我的问题。我的出发点是的。 通过此映射,hibernate创建以下表: 到目前为止还不错。接下来,我尝试将列表转换为映射,并使用项。keyValue作为地图的键: 它可以工作,但在表中,映射的键列始终称为,我无法找到如

  • 问题内容: 我发现自己处于一个不熟悉的数据库中的位置,该数据库的每个表都有大量的列。我对要查找的数据有所了解,但我不知道该数据位于哪一列中并需要使用它来定位所需的确切数据(并且必须针对多组数据重复执行此任务) 。 有没有办法像笛卡尔选择一样应用? 以下内容将说明我想做的更好的一点(即使在语法上很荒谬): 编辑 : 请注意,我无意在任何报告中使用直角坐标选择-此处的目的是帮助我确定需要放入查询中的相