问题描述
我想设置 polybase 以从 Azure Data Lake Gen2 读取/写入数据。
到目前为止,通过 polybase 将数据写入 Azure 没有问题。
使用的代码:
CREATE DATABASE ScopED CREDENTIAL AzureStorageKey
WITH IDENTITY = 'Some_Any_String',Secret = 'theazureKey00102037etcetc';
GO
CREATE EXTERNAL DATA SOURCE AzureStorage
with (
TYPE = HADOOP,LOCATION ='wasbs://mycontainer@mylake.blob.core.windows.net',CREDENTIAL = AzureStorageKey
);
GO
CREATE EXTERNAL FILE FORMAT DelimitedFormat WITH (
FORMAT_TYPE = DELIMITEDTEXT,FORMAT_OPTIONS (FIELD_TERMINATOR =';',USE_TYPE_DEFAULT = TRUE));
GO
CREATE EXTERNAL TABLE [dbo].[TestTable] (
[ID] INT NOT NULL,[Name] VARCHAR(10) NOT NULL,[SomeValue] INT NULL
)
WITH (LOCATION='/2021/01/10',DATA_SOURCE = AzureStorage,FILE_FORMAT = DelimitedFormatCom
);
INSERT INTO [dbo].[TestTable] (ID,Name,SomeValue)
SELECT 1 as ID,'AAA' as Name,100 as SomeValue
union
SELECT 2 as ID,'BBB' as Name,200 as SomeValue
union
SELECT 3 as ID,'CCC' as Name,300 as SomeValue
插入结果
(3 rows affected)
Completion time: 2021-01-11T22:08:53.0447043+00:00
我可以看到数据湖中的数据
如果我想从上面读取数据
SELECT * FROM [dbo].TestTable
结果是错误
Cannot execute the query "Remote Query" against OLE DB provider "MSOLEDBsql" for Linked Server "(null)". HdfsBridge::recordReaderFillBuffer - Unexpected error encountered filling record reader buffer: NoSuchMethodError: java.nio.ByteBuffer.clear()Ljava/nio/ByteBuffer;
我使用的是本地 sql Server 2019 - 开发人员版。
Java 已安装
解决方法
您是否使用具有读写权限的 SAS 创建了访问密钥?
,一旦数据已经存储,尝试创建另一个外部表,它可能会引导您找出问题所在,因为我也这样做了,但没有发现任何问题。另外,您是否安装了 SQL Server 附带的 Java 或不同的 Java?我在此处找到了指示 Java 问题的错误消息:https://github.com/lmdbjava/lmdbjava/issues/116
,我已经在普通 Windows 10 上安装了 SQL 2019 Dev。 然后最后一切看起来都很好,在基于 Azure Storage Gen2 的外部表中插入/选择数据没有 Java 错误。
我使用了本主题中发布的 SQL 脚本。