【问题标题】:Detecting CSV Headers when creating a DataBricks Delta Table?创建 DataBricks Delta 表时检测 CSV 标头?
【发布时间】:2019-06-07 01:28:32
【问题描述】:

不用说,我是 Spark DataBricks 和 Delta 的新手。

我正在尝试使用 %sql 从一个简单的 csv 创建一个增量表,其中第一行是标题行。不幸的是,我似乎无法让初始 CREATE TABLE 识别 CSV 中的标题列(请注意,我一直使用 DataBricks 快速入门作为指南 - https://docs.databricks.com/delta/quick-start.html

我的 Databricks 笔记本中的代码是

%sql
CREATE TABLE people
USING delta
LOCATION '/dbfs/mnt/mntdata/DimTransform/People.csv'

我已尝试使用 TBLPROPERTIES ("headers" = "true") 但没有成功 - 见下文

%sql
CREATE TABLE people
USING delta
TBLPROPERTIES ("headers" = "true")
AS SELECT *
FROM csv.'/mnt/mntdata/DimTransform/People.csv'

在这两种情况下,csv 数据都会加载到表中,但标题行只是作为第一个标准行包含在数据中。

任何想法如何让这个 %sql CREATE TABLE 在从 csv 加载时将第一行/标题行识别为标题?

谢谢

【问题讨论】:

    标签: azure-databricks delta-lake


    【解决方案1】:

    也许您必须做一个小解决方法,因为您使用的是 CSV 文件,而不是 JSON 或 PARQUET,这些文件具有架构和 csv 编号。

    所以我建议这样做::

    %sql
    drop table if exists tempPeopleTable ;
    CREATE TABLE tempPeopleTable
      USING csv
      OPTIONS (path "/mnt/mntdata/DimTransform/People.csv", header "true", inferSchema "true");
    
    CREATE TABLE people
    USING delta
    AS SELECT * FROM tempPeopleTable;
    
    drop table if exists tempPeopleTable;
    

    【讨论】:

    • 谢谢法比奥,这是一个很好/明确的建议,如果这是最好的解决方法,我很乐意接受。也就是说,虽然我同意 csv 没有定义的模式,但它确实有一个标题行,通常被认为是您在 csv 中定义“模式”的方式。我假设/希望 Delta 有一种机制来从 csv 标头推断架构,就像您建议的代码在创建 TABLE tempPeopleTable 时推断架构一样。
    • 实际上问题不在于创建增量表,问题在于 select * from csv.file 在这里我没有找到一种方法来向数据块“说”第一列是架构跨度>
    猜你喜欢
    • 2022-11-05
    • 1970-01-01
    • 2022-08-12
    • 2021-04-15
    • 2021-09-29
    • 2019-05-14
    • 2020-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多