要授予用户运行的能力Bulk Insert T-SQL command,需要授予登录/用户:
BULKADMIN服务器角色 - 或 -ADMINISTER BULK OPERATIONS服务器级别权限BULKADMIN但是服务器角色和ADMINISTER BULK OPERATIONS服务器级权限有什么区别呢?
目前,我正在尝试将数据从 复制TABLE1到TABLE2。
就插入性能而言,如果我这样做,它会相同还是更快
BULK INSERT手动(即通过 批量插入每 10K 条记录到 TABLE2 中INSERT INTO TABLE2 VALUES (1,2), (5,5), ...),与INSERT INTO TABLE2 SELECT * FROM TABLE1我想 在 SQL Server 2008 R2 上使用T-SQL BULK INSERT插入带有可选日期时间值(每行)的行。
一张表可能如下所示:
CREATE TABLE [dbo].[tbl_bulk_insert_datetime_issue] (
[id] [int] NOT NULL,
[description] [varchar](20) NOT NULL,
[datetime] [datetime] NULL,
CONSTRAINT [pk_bulk_insert_datetime_issue] PRIMARY KEY CLUSTERED (
[id] ASC
))
Run Code Online (Sandbox Code Playgroud)
插入批次:
BULK
INSERT [dbo].[tbl_bulk_insert_datetime_issue]
FROM 'C:\temp\bulkinsertsample.csv'
WITH
(
FIELDTERMINATOR=';'
)
Run Code Online (Sandbox Code Playgroud)
如果我要插入以下 CSV 内容:
1;row01;
2;row02;20130401
3;row03;
4;row04;20130515
Run Code Online (Sandbox Code Playgroud)
表的内容已按预期解析和插入:
id description datetime
----------- -------------------- -----------------------
1 row01 NULL
2 row02 2013-04-01 00:00:00.000
3 row03 NULL
4 row04 2013-05-15 00:00:00.000
Run Code Online (Sandbox Code Playgroud)
1;row01;
2;row02;20130401
3;row03;not_a_datetime …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用批量插入将 .CSV 文件导入到 mssql 表中(尽管我对其他方法持开放态度)。我有一个批量插入 sql 语句,但是当我执行文件时它说(0 行受影响)。但是,我在文件本身中有数据。
示例 CSV 文件(标题 + 标题下方的一行)
.CSV 标题
更改,停用,锁定,noemail,empno,orighire,薪水,salut,fname,mi,lname,用户名,hstreet1,hstreet2,hcity,hstate,hcountry,hzip,busphone,busext,蜂窝,empemail,职位,工作代码,工作组, orglevel1,orglevel2,orglevel3,orglevel4,orglevel5,company,perfdate,supervisor,misc1,misc2,misc3,misc4,active
.CSV 内容
2014-04-03 00:00:00,NO ,NO ,NO ,1133,2014-04-03 00:00:00,1111.1111,,test,test,test,user.test,111 测试方式,,萨克拉门托, CA,USA,11111,,,,test@test.org,test test,057,02,sss,261,SAC,,test,ttt,1911-11-11 00:00:00,1111,N,,test ,0,NULL
.SQL
BULK
INSERT dbo.Archive
FROM 'C:\scripts\User.csv'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\r\n',
FIRSTROW = 2
)
GO
Run Code Online (Sandbox Code Playgroud)
我试图通过 ps 实现这一点,这是结果和代码:
# Database variables
$sqlserver = "dbserver"
$database = "db"
$table = "tb"
# CSV variables
$csvfile = "C:\scripts\User.csv"
$csvdelimiter = ","
$firstRowColumnNames = $true
################### No need to …Run Code Online (Sandbox Code Playgroud) 我们正在尝试诊断 MySQL 瓶颈,特别是数据写入。基本上,我们有一个进程从文件夹中选取文件并使用LOAD DATA CONCURRENT INFILE. 目前看来,我们生成的文件比 MySQL 可以使用的要多。具体来说,我们每分钟生成大约一百万行(所有文件加起来),我们的摄取率为每秒 15,000 行(900,000 次写入)(基于Show Engine INNODB Status)。
表 X 有 31 列,其中 17 列是整数,12 个浮点数和 1 个字符 (10),相当简单。它还有一个自动增量整数列和时间戳(纪元)和自动增量的主键。柱子。
MySQL 实例信息(物理主机): 40 核,256 GB RAM,8 个 SSD 作为单个逻辑驱动器 (RAID 0) 我们同时使用 InnoDb 和 MYIASM,但我们试图优化写入的表驻留在 Innodb 中。
当前资源利用率: 10% CPU、50% 系统内存(已分配)、低磁盘利用率
MySQL Config: table_cache = 1000
thread_cache = 60
max_heap_table_size = 8192M
join_buffer_size = 256K
sort_buffer_size = 256K
query_cache_size = 512M
query_cache_limit = 512M
key_buffer_size = 8000M
bulk_insert_buffer_size = 2000M …Run Code Online (Sandbox Code Playgroud) 我们目前正在尝试将大量数据(大约 2700 万条记录、200 列)插入到 postgres 9.4 数据库的单个表中。(是的,最好将表重构为较小的表,但首先尝试此方法)
插入由 libpq 应用程序管理,该应用程序使用“INSERT INTO ...”一次插入大约 300 行数据。我们已经阅读过有关使用 COPY 命令的信息,但就我们当前的使用情况而言,前者是更好的选择,具有不错的性能。有些列是数组,可能相当大,但使用此设置,我们可以毫无问题地插入大约 1000 万行数据。
问题:每当表达到大约 600GB(约 2000 万行)时,插入就会停止。pg_stat_activity 显示插入查询处于活动状态,并且输出和日志中都没有错误。对于通常需要几秒钟的插入查询,我们已经等待了超过 12 个小时。
我们尝试了一些方法,例如删除唯一索引(主键)、运行 ANALYZE 以及重新启动插入,但每当表达到 600GB 左右时,插入就会停止。我们不相信我们会遇到任何接近表格最大尺寸的情况,因此不确定发生了什么。
有人有什么主意吗?或者对如何找出插入过程中出现的问题有一些建议?
谢谢!
更新#1:如上所述,插入的行有 200 列宽,其中一些字段是数组。
当对表的插入停止时,我们尝试手动插入记录:
正如我们之前所见,典型的行不会被插入,查询也会挂起。当我们减少填充列的数量(例如,插入仅包含 200 个值中的 30 个值的记录)时,插入会成功,没有延迟/减慢。通过改变查询中填充列的数量,我们发现了一个截止点,如果插入的列数大于一定数量,则插入将挂起。(我们也尝试了不同的列组合,但没有任何效果)
我们不知道如何直接解决这个问题,因此我们目前正在按照建议将数据分区到不同的(较小的)表中。然而,任何文档中都没有提到这个问题,所以任何建议仍然将不胜感激!
在 SSMS 中,我们尝试将 csv 文件批量插入到具有使用 SQL Server 2016 的始终加密功能加密的列的表中。
这是我们正在使用的命令:
INSERT INTO membersE
SELECT *
FROM OPENROWSET(
BULK 'c:\members.csv',
FORMATFILE = 'c:\membersEFormat.xml',
FIRSTROW = 2
) m
Run Code Online (Sandbox Code Playgroud)
这将返回尝试插入加密列时出现的典型错误:
MSG 206,第16级,状态2,第6行
操作类型冲突:Varbinary与Varchar(50)与(Encryption_Type ='desirctionistist',Encryption_algorithm_name ='aead_aes_aes_aes_aes_aes_256_cbc_hmac_hmac_hmac_sha_256',column_encryetto ='aead_aes_aes_aes_aes_emcy_yerto ='aead_aes_aes_aes_256 ase_name ='数据库')排序规则名称 = 'Latin1_General_BIN2'
我们知道您无法通过 SSMS 插入加密列,并且您需要使用 .NET 4.6.1+ 客户端,但我们想知道批量插入操作是否也无法实现?
对我有用的示例代码
(满足 Windows10 的要求)
SqlCommand cmd;
SqlConnection conn;
SqlBulkCopy copy;
SqlDataAdapter da;
DataTable dt;
using (conn = new SqlConnection(ConfigurationManager.ConnectionStrings["Database"].ConnectionString))
{
conn.Open();
using (cmd = new SqlCommand("SELECT * FROM members", conn))
using (copy = new SqlBulkCopy(conn)) …Run Code Online (Sandbox Code Playgroud) 我们有一个用户每次使用网络位置进行批量加载时都会收到此错误消息,它会在下面引发错误。
“无法批量加载,因为无法打开文件。操作系统错误代码 3(无法检索此错误的文本。原因:15105)。”
FQDN 指定为文件的位置 (\servername\sharename\filename.txt)
当文件被复制到服务器(C:\ 驱动器)上时,查询通过 SSMS 运行良好
我已经检查了共享文件夹的所有 NTFS 权限。我已经浏览了许多建议解决方案的帖子,但没有运气。
以下是同一事物的两种不同语法。
带有COPY TABLE AS SELECT( CTAS)。
CREATE TABLE main
AS
SELECT *
FROM other;
Run Code Online (Sandbox Code Playgroud)作为单独的语句CREATE TABLE和INSERT INTO
CREATE TABLE main (like other);
INSERT INTO main
SELECT *
FROM other;
Run Code Online (Sandbox Code Playgroud)我观察到的CTAS比明显快CREATE TABLE.. INSERT。第一个需要 20 秒才能完成执行。第二个语法二需要 1 分 15 秒才能完成执行。
差异的原因可能是什么?
出于某种原因,MS SQL Server 2016 批量插入会误解/翻译 Unicode 字符:
即 Notepad++ 和 xxd 显示平面文件有 0xC9,但在批量插入后,表显示“+”,并在 SQL Server 中转换为 varbinary 显示为 0x2B。备份也有 0xC9。
我正在向 MS SQL Server 2016 中批量插入 25 个平面文件。它是 15Gb 数据,我正在使用管道 ( | ) 字段分隔符和CRLF行分隔符。
我批量插入到我提供的备份的截断结构中。当我与备份进行比较时,存在差异。注意:我必须等待 25 小时才能从数据源备份,但可以在 …
bulk-insert ×10
sql-server ×5
insert ×2
mysql ×2
postgresql ×2
collation ×1
csv ×1
ctas ×1
datetime ×1
encoding ×1
errors ×1
innodb ×1
mariadb ×1
mysql-5.5 ×1
performance ×1
permissions ×1
ssms ×1
t-sql ×1
unicode ×1