适用于:Microsoft Fabric 中的✅ 仓库
OPENROWSET 函数允许读取 Parquet 或 CSV 文件的内容,并将数据作为一组行返回。 这些文件可以存储在 Azure Blob 存储、Azure Data Lake Storage 或 Fabric OneLake 中。
Important
使用 OPENROWSET 函数从 Fabric OneLake 存储读取文件目前处于 预览版 阶段。
在将文件内容加载到数据仓库表中之前,可以使用此功能来检查文件内容。 使用 OPENROWSET,可以轻松浏览引入到 Fabric 仓库中的文件,了解要引入的列,并确定其类型。
了解数据后,可以创建用于存储引入的文件内容的表。
使用 OPENROWSET 函数浏览 Parquet 文件
在第一个示例中,我们检查来自 Parquet 源的数据。
使用以下代码通过 PARQUET 源使用 OPENROWSET(BULK) 函数从文件中读取示例数据:
SELECT TOP 10 *
FROM OPENROWSET(BULK 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.parquet') AS data
由于此数据是公开可用的且不需要身份验证,因此可以轻松地将此查询复制到 Fabric 仓库,并在不进行任何更改的情况下执行该查询。
不需要身份验证详细信息。
不需要指定 FORMAT 选项,因为 OPENROWSET 函数会根据 URI 中的 .parquet 文件扩展名假定读取 Parquet 格式。
使用 OPENROWSET 函数浏览 CSV 文件
第二个示例检查 CSV 文件中的数据。 使用以下代码通过 OPENROWSET(BULK) 函数从 CSV 文件读取示例数据:
SELECT TOP 10 *
FROM OPENROWSET(BULK 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.csv') AS data
由于此数据是公开可用的且不需要身份验证,因此可以轻松地将此查询复制到 Fabric 仓库,并在不进行任何更改的情况下执行该查询。 不需要身份验证详细信息。
无需指定FORMAT选项,因为OPENROWSET函数假定你正在基于 CSV URI 中的文件扩展名读取.csv格式。
Note
在结果中,你可能会注意到,此文件中的第一行包含列名而不是数据。 对于这种情况,你需要使用 HEADER_ROW 选项修改查询,以跳过该行,并仅将其用于列名称。 这是数据浏览过程的一部分,你逐渐调整文件,直到它与基础数据匹配。
使用 OPENROWSET 函数浏览 JSONL 文件
通过此 OPENROWSET(BULK) 函数,可以按行分隔格式浏览 JSON 文件:
SELECT TOP 10 *
FROM OPENROWSET(BULK 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.jsonl') AS data
如果文件包含行分隔的文本,其中每行表示有效的 JSON 文档, OPENROWSET 则函数可用于直接读取它。
无需显式指定 FORMAT 选项。 将根据 URI 中常见的文件扩展名(如 OPENROWSET、.jsonl 或 .ldjson),自动推断 JSONL 格式。 但是,如果为此格式使用不同的文件扩展名,则必须指定 FORMAT = 'jsonl' 以确保正确分析。
读取 Fabric OneLake 中的文件
使用该 OPENROWSET(BULK) 函数可以读取存储在 Fabric OneLake 中的文件。 如果文件存储在 Lakehouse 的文件部分中,则可以使用以下语法读取此文件。
SELECT TOP 10 *
FROM OPENROWSET(BULK 'https://onelake.dfs.fabric.microsoft.com/<workspaceId>/<lakehouseId>/Files/latest/bing_covid-19_data.jsonl') AS data
在 Fabric 工作区 URI 中,用您找到的工作区和 Lakehouse GUID 替换 <workspaceId> 和 <lakehouseId>。 请确保引用 Lakehouse 节中的 /Files 文件。
Important
使用 OPENROWSET 函数从 Fabric OneLake 存储读取文件目前处于 预览版 阶段。 请参阅适用于和COPY INTO适用的OPENROWSET(BULK)。
读取自定义文本文件
该 OPENROWSET(BULK) 函数允许你定义用于读取自定义文本文件的各种选项。
例如,可以为 ROWTERMINATOR 和 FIELDTERMINATOR 指定值以指示基础文件格式。
select *
from OPENROWSET(BULK 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.csv',
FORMAT='CSV',
HEADER_ROW=True,
ROW_TERMINATOR='\n',
FIELD_TERMINATOR=','
) AS data
在此示例中,我们显式指定以 CSV 格式读取文件,其中每行用换行符分隔,每个字段用逗号分隔。 第一行包含标题,它将用于列名。
浏览列元数据
使用 OPENROWSET 函数,可以通过将读取示例数据的查询与 sp_describe_first_result_set 过程相结合,轻松查看文件列及其类型:
EXEC sp_describe_first_result_set
N'SELECT TOP 0 *
FROM OPENROWSET(BULK ''https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.parquet'') AS data';
在此示例中,该过程 sp_describe_first_result_set 使用函数执行查询 OPENROWSET ,该函数不返回任何行。
然后,它从此内部查询获取列架构,并返回列架构作为过程的结果。
可以使用此列架构在引入数据的语句中 CREATE TABLE 定义目标表的结构。
作为替代方法,可以使用这些结果为函数的结果 OPENROWSET 指定更精确的类型,如以下示例所示。
指定 OPENROWSET 函数的架构
OPENROWSET(BULK) 函数基于数据的样本返回估计列类型。
如果样本不具有代表性,可能会得到意外的类型或大小。
如果知道文件中的列类型,则可以使用 WITH 子句显式定义列的架构:
SELECT TOP 10 *
FROM OPENROWSET(BULK 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.csv') AS data
WITH (updated date,
load_time datetime2,
deaths_change smallint,
id int,
confirmed int,
confirmed_change int,
deaths int,
recovered int,
recovered_change int,
latitude float,
longitude float,
iso2 varchar(8000),
iso3 varchar(8000),
country_region varchar(8000),
admin_region_1 varchar(8000),
iso_subdivision varchar(8000),
admin_region_2 varchar(8000)
) AS data;
OPENROWSET(BULK) 函数不会猜测列的数据类型,而是显式分配在 WITH 子句中提供的类型。
这样,便可以定义更精确的类型,从而提高查询的性能。
后续步骤
完成文件浏览和创建目标表后,可以使用以下方法之一继续引入: