由于 DATE 类型无效,带批量选项的 Openrowset 无法检索记录
Openrowset with bulk option cannot retrieve records due to an invalid type DATE
尝试使用 openrowset
和 bulk
选项读取镶木地板文件时遇到以下错误:
Error handling external file: 'Inserting value to batch for column type DATE failed. Invalid argument provided.'
此问题表示无法读取文件,因为数据包含非 DATE 类型的值 - 事实上,有 undefined
和 0001-01-01
记录,所以当 BULK
操作执行这些值防止加载整个镶木地板文件(见下面的代码)。
SELECT
TOP 100
POST_SEARCH_DATE,
SEARCH_DATE
FROM
OPENROWSET(
BULK 'https://test/refined-parquet/data/v1.0/loaddt=2022-01-01/**',
FORMAT = 'PARQUET'
) AS [result]
我认为的一种替代方法是将列转换为 varchar 以绕过错误,但不幸的是,这没有任何区别(见下文)。
SELECT
TOP 100
POST_SEARCH_DATE,
SEARCH_DATE
FROM
OPENROWSET(
BULK 'https://test/refined-parquet/data/v1.0/loaddt=2022-01-01/**',
FORMAT = 'PARQUET'
) AS [result]
WHERE cast(POST_SEARCH_DEPARTURE_DATE as varchar(100))!= 'undefined'
and cast (SEARCH_DEPARTURE_DATE as varchar(100)) != 'undefined'
and cast (SEARCH_DEPARTURE_DATE as varchar(100)) != '0001-01-01'
and cast(POST_SEARCH_DEPARTURE_DATE as varchar(100))!= '0001-01-01'
我找到了一些关于将每条记录插入临时 table 的建议,从那里您可以忽略失败的记录。有人可以帮我提供有关此解决方案或其他替代方案的更多详细信息吗?
您是否尝试过在使用 OPENROWSET 的同时使用 WITH
来定义数据类型?
SELECT
TOP 100
POST_SEARCH_DATE,
SEARCH_DATE,
EXAMPLE_COL
FROM
OPENROWSET(
BULK 'https://test/refined-parquet/data/v1.0/loaddt=2022-01-01/**',
FORMAT = 'PARQUET'
WITH (
[SEARCH_DEPARTURE_DATE] VARCHAR(100) COLLATE Latin1_General_BIN2 3,
[POST_SEARCH_DEPARTURE_DATE] VARCHAR(100) COLLATE Latin1_General_BIN2 2,
[EXAMPLE_COL] VARCHAR(100)
) AS [r]
尝试使用 openrowset
和 bulk
选项读取镶木地板文件时遇到以下错误:
Error handling external file: 'Inserting value to batch for column type DATE failed. Invalid argument provided.'
此问题表示无法读取文件,因为数据包含非 DATE 类型的值 - 事实上,有 undefined
和 0001-01-01
记录,所以当 BULK
操作执行这些值防止加载整个镶木地板文件(见下面的代码)。
SELECT
TOP 100
POST_SEARCH_DATE,
SEARCH_DATE
FROM
OPENROWSET(
BULK 'https://test/refined-parquet/data/v1.0/loaddt=2022-01-01/**',
FORMAT = 'PARQUET'
) AS [result]
我认为的一种替代方法是将列转换为 varchar 以绕过错误,但不幸的是,这没有任何区别(见下文)。
SELECT
TOP 100
POST_SEARCH_DATE,
SEARCH_DATE
FROM
OPENROWSET(
BULK 'https://test/refined-parquet/data/v1.0/loaddt=2022-01-01/**',
FORMAT = 'PARQUET'
) AS [result]
WHERE cast(POST_SEARCH_DEPARTURE_DATE as varchar(100))!= 'undefined'
and cast (SEARCH_DEPARTURE_DATE as varchar(100)) != 'undefined'
and cast (SEARCH_DEPARTURE_DATE as varchar(100)) != '0001-01-01'
and cast(POST_SEARCH_DEPARTURE_DATE as varchar(100))!= '0001-01-01'
我找到了一些关于将每条记录插入临时 table 的建议,从那里您可以忽略失败的记录。有人可以帮我提供有关此解决方案或其他替代方案的更多详细信息吗?
您是否尝试过在使用 OPENROWSET 的同时使用 WITH
来定义数据类型?
SELECT
TOP 100
POST_SEARCH_DATE,
SEARCH_DATE,
EXAMPLE_COL
FROM
OPENROWSET(
BULK 'https://test/refined-parquet/data/v1.0/loaddt=2022-01-01/**',
FORMAT = 'PARQUET'
WITH (
[SEARCH_DEPARTURE_DATE] VARCHAR(100) COLLATE Latin1_General_BIN2 3,
[POST_SEARCH_DEPARTURE_DATE] VARCHAR(100) COLLATE Latin1_General_BIN2 2,
[EXAMPLE_COL] VARCHAR(100)
) AS [r]