Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server Polybase可连接本地CSV文件_Sql Server_Polybase - Fatal编程技术网

Sql server Polybase可连接本地CSV文件

Sql server Polybase可连接本地CSV文件,sql-server,polybase,Sql Server,Polybase,我无法从SQL Server数据库访问本地CSV文件。这是一个简单的3列文本文件。我还创建了一个本地系统DSN(来自ODBC32 UI) 我从中获得了示例代码。但是,链接(cdata)中的驱动程序不是免费的。我们将非常感谢为解决这一问题提供的任何帮助 create master key encryption by password = 'Polybase2CSV'; create database scoped credential csv_creds with identity = 'use

我无法从SQL Server数据库访问本地CSV文件。这是一个简单的3列文本文件。我还创建了一个本地系统DSN(来自ODBC32 UI)

我从中获得了示例代码。但是,链接(cdata)中的驱动程序不是免费的。我们将非常感谢为解决这一问题提供的任何帮助

create master key encryption by password = 'Polybase2CSV';

create database scoped credential csv_creds
with identity = 'username', secret = 'password';

create external data source csv_source
with ( 
  location = 'odbc://localhost',
  connection_options = 'DSN=CustomerDSN', -- this is the DSN name 
  -- PUSHDOWN = ON | OFF,
  credential = csv_creds
);


CREATE EXTERNAL TABLE Customer
(
    CUSTOMERID int,
    CUSTOMERNAME varchar(250),
    DEPARTMENT varchar(250)
) WITH (
    LOCATION='customer.txt',
    DATA_SOURCE=csv_source
);

要直接创建数据源,您需要购买该驱动程序。这是选项1,但因为它不在窗口中。你还有两个选择。将该数据直接导入SQL Server,或者如果您确实想使用PolyBase。将该数据加载到暂存SQL表中,然后创建引用该暂存表的外部表

我的假设:CSV数据没有过时。结构/模式将保持不变。 创建一个临时表。使用

Import-DbaCSV -Path "D:\CustomerTest\Customer.csv"`
              -SqlInstance ServerName`
              -Database DBName`
              -Table "Customer"
然后回收代码,连接到PolyBase或直接使用数据

CREATE DATABASE SCOPED CREDENTIAL csv_creds
WITH IDENTITY = 'username', SECRET = 'password';

CREATE EXTERNAL DATA SOURCE csv_source
    WITH ( LOCATION = 'sqlserver://SERVERNAME:PORTNUMBER',
    PUSHDOWN = ON,
    CREDENTIAL = csv_creds);

然后,您可以根据需要定期运行PS函数将数据加载到表中。

这需要几个步骤才能使其成功工作。作为先决条件,您需要确保SQL Server 2019已更新为CU4(),以修复一些已知问题。对于免费解决方案,您需要安装64位版本。这将安装64位版本的ODBC驱动程序

有了这两样东西,现在就可以创建外部数据源了。我建议禁用
下推
。我看到它会给这个司机带来一些问题

如果要直接连接到包含标题行的CSV文件,只需指定Access文本驱动程序和包含这些文件的文件夹,即可创建外部数据源:

创建外部数据源MyODBC
具有
( 
地点:odbc://localhost',
连接选项='Driver=Microsoft Access文本驱动程序(*.txt,*.csv);Dbq=F:\data\files\',
下推=关闭
);
要使用数据源,需要创建反映文件格式的外部表定义。
LOCATION
参数将是要加载的文件的名称。可以将文件名和驱动程序名用大括号括起来,以避免出现特殊字符问题。确保为此表定义的列名与标题行中的名称匹配非常重要。因为您使用的是CU4,所以如果数据类型与驱动程序的期望不匹配,您将得到一个错误,指示预期的数据类型

创建外部表dbo.CsvData
(
名称nvarchar(128),
计数int,
说明nvarchar(255)
)
具有
(
位置=“[filename.csv]”,
数据源=[MyODBC]
)
如果要在ODBC数据源(64位)用户界面中定义列名、数据类型等,请选择Microsoft Access文本驱动程序。然后可以选择文件夹、文件类型和文本文件格式的定义。确保使用64位数据源。定义完格式详细信息后,将在包含这些详细信息的文件夹中创建一个
schema.ini
文件

对于外部数据源,您将指定DSN的名称:

创建外部数据源MyODBC
具有
( 
地点:odbc://localhost',
连接\u选项='DSN=LocalCSV',
下推=关闭
);

外部表
的创建方式与以前相同,列名和数据类型与您在DSN中声明的定义相匹配。

谢谢Rahim。尽管这是一个解决方案,但我们的要求是以真正的数据虚拟化方式访问数据(不移动数据)。谢谢Ken。我试试看。我很快就会发布我的发现。