我正在开发databricks交互式集群,我想使用SQL查询存储在ADLS或DBFS中的csv文件。
问题:
我可以轻松地对增量表和镶木地板文件执行此操作。但是,当我对具有特定分隔符的 csv 执行此操作时,我会将所有列加载为一列。
%sql SELECT *
from delta.`dbfs:/path/to/delta/table`
^^ 正确显示输出
%sql SELECT *
from csv.`dbfs:/path/to/file.csv`
^^ 将输出显示为一列,不带标题。基本上它需要传递一些选项来指定 sep 和 headers
潜在的解决方案:
我可以轻松地在 Spark 中执行此操作,
spark.read.csv("dbfs:/path/to/file.csv", header=True, sep="|")
但是如何在 Spark SQL 中执行此操作(魔术命令)?
我可以创建一个指定选项的表格
%sql CREATE TABLE schema.table
USING CSV
OPTIONS (path "dbfs:/path/to/file.csv", header "true", delimiter "|")
然后我就可以查询数据了。
但是有没有办法只选择 * csv 数据而不创建这些中间表?
Databricks 不支持不使用
spark.read
直接对 CSV 文件执行 SQL 查询。
要使用 Databricks SQL 访问存储在 DBFS(Databricks 文件系统)中的文件,首先需要创建引用该文件的表或视图。 此过程涉及将数据从 CSV 文件复制到表或视图中。创建表或视图后,您可以查询它以从文件中检索数据。
我已经尝试过你的方法,我可以使用标题从 CSV 中读取数据
OPTIONS (header "true", delimiter ",")
但是我收到错误 %sql 选择 * 来自 csv。
dbfs:/FileStore/tables/sample.csv
_c0 _c1 _c2
Name Age Country
Emma 28 Australia
Name Age Country
Alice 30 Canada
Name Age Country
Michael 35 UK
Name Age Country
John 25 USA
我尝试过以下方法
%sql
CREATE OR REPLACE TEMPORARY VIEW sample_view
USING csv
OPTIONS (path "dbfs:/FileStore/tables/sample.csv", header "true", inferSchema "true", delimiter ",")
结果:
Name Age Country
Emma 28 Australia
Alice 30 Canada
Michaeference:el 35 UK
John 25 USA