我试图在SQL Server 2017中试验外部文件,并且在第一步遇到困难。
数据是管道分隔的,我尝试按照文档中的语法进行操作,这需要FILE_FORMAT
。
以下是每个Microsoft的语法:
CREATE EXTERNAL TABLE [ database_name . [ schema_name ] . | schema_name. ]
table_name
( <column_definition> [ ,...n ] )
WITH (
LOCATION = 'folder_or_filepath',
DATA_SOURCE = external_data_source_name,
FILE_FORMAT = external_file_format_name
[ , <reject_options> [ ,...n ] ]
)
[;]
这需要file_format。
以下是另一个MS页面的语法:
CREATE EXTERNAL FILE FORMAT file_format_name
WITH (
FORMAT_TYPE = DELIMITEDTEXT
[ , FORMAT_OPTIONS ( <format_options> [ ,...n ] ) ]
[ , DATA_COMPRESSION = {
'org.apache.hadoop.io.compress.GzipCodec'
| 'org.apache.hadoop.io.compress.DefaultCodec'
}
]);
以下是我编写的用于创建管道分隔文件的内容:
CREATE EXTERNAL FILE FORMAT psv
WITH (
FORMAT_TYPE = DELIMITEDTEXT
, FORMAT_OPTIONS (FIELD_TERMINATOR = '|')
);
以下是错误消息:
Msg 102,Level 15,State 1,Line 3
&#39; EXTERNAL&#39;附近的语法不正确。
答案 0 :(得分:3)
美好的一天,
创建外部文件格式基于PolyBase ,这意味着您需要安装PolyBase并启用它。除非您这样做,否则您会收到此错误。
在下面的过程中,您可以看到无论PolyBase为何,都可以使用相关元素的一部分,而其他元素则需要更多步骤...让我们来看一下这个示例:
create database MyLocalDB;
GO
use MyLocalDB
GO
-- Creates a database master key.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'My!Simple@Pass#for$Lecture'
GO
CREATE DATABASE SCOPED CREDENTIAL MyAzureBlobStorageCredential
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = '<enter you blob key here>';
GO
让我们在SSMS中创建外部数据源:
CREATE EXTERNAL DATA SOURCE MyAzureBlobStorage
WITH (
TYPE = BLOB_STORAGE,
LOCATION = 'https://EnterYourBlobNameHere.blob.core.windows.net/invoices',
CREDENTIAL= MyAzureBlobStorageCredential
);
GO
您可能会收到错误:“ BLOB_STORAGE附近的语法不正确” 这是SSMS解析器的问题,而不是查询的问题。您可以从SOS而不是SSMS执行相同的查询。由于某些原因,当我们使用Azure SQL数据库时,它在SSMS中执行得很好。
SELECT * FROM sys.external_data_sources
GO
现在我们来解决您的问题
CREATE EXTERNAL FILE FORMAT myfileformat
WITH (
FORMAT_TYPE = DELIMITEDTEXT,
FORMAT_OPTIONS (FIELD_TERMINATOR ='|')
);
-- ERROR: Incorrect syntax near 'EXTERNAL'.
需要更多工作...
安装“ java运行时环境”(需要版本7及更高版本) https://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html
运行SQL Server安装并添加功能:“用于外部数据的PolyBase查询服务”
根据您使用的源使用sp_configure
启用PolyBase源配置
最后一点,例如,暗示对于hadoop连接,您需要:
USE master;
GO
EXEC sp_configure 'show advanced option', '1';
RECONFIGURE;
GO
EXEC sp_configure 'hadoop connectivity', 1;
RECONFIGURE;
GO
有关这一点的更多信息,您可以获取官方文档:https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/polybase-connectivity-configuration-transact-sql
确认已安装PolyBase:
SELECT SERVERPROPERTY ('IsPolybaseInstalled') AS IsPolybaseInstalled;
GO
尝试执行查询
CREATE EXTERNAL FILE FORMAT myfileformat
WITH (
FORMAT_TYPE = DELIMITEDTEXT,
FORMAT_OPTIONS (FIELD_TERMINATOR ='|')
);
-- ERROR: TCP Provider: No connection could be made because the target machine actively refused it.
如果出现上述错误,则:(1)使用SQL Server配置管理器启用TCP。 (2)确保PolyBase服务正在运行
CREATE EXTERNAL FILE FORMAT myfileformat
WITH (
FORMAT_TYPE = DELIMITEDTEXT,
FORMAT_OPTIONS (FIELD_TERMINATOR ='|')
);
-- OK
就这样:-)
您现在可以使用外部文件格式并创建外部表
我希望这是有用的:-)