Redshift副本从分析中创建不同的压缩编码
我注意到AWS RedShift建议从将数据(通过副本)加载到空表中时自动创建的列进行不同的列压缩编码. 例如,我创建了一个表并从S3加载数据如下: CREATE TABLE Client (Id varchar(511) , ClientId integer , CreatedOn timestamp, UpdatedOn timestamp , DeletedOn timestamp , LockVersion integer , RegionId varchar(511) , OfficeId varchar(511) , CountryId varchar(511) , FirstContactDate timestamp , DidExistPre boolean , IsActive boolean , StatusReason integer , CreatedById varchar(511) , IsLocked boolean , Lock
2 2024-01-25
编程技术问答社区
错误:在将数据导入Redshift时
我想从一个数据库(生产)中卸载,然后重新加载到具有完全相同模式的Redshift中的另一个数据库(QA)中. i发出的S3加载命令如下. copy table(col1,col2,col3,col4) from 's3:///.gzip' CREDENTIALS 'aws_access_key_id=;aws_secret_access_key=' delimiter '|' gzip NULL AS 'null_string'; 有以下错误. 错误:写作主体失败(0!= xxx)原因:未能使数据充气或不完整的Deflate数据. Zlib错误代码:-3 error: Failed writing body (0 != XXX) Cause: Failed to inflateinvalid or incomplete deflate data. zlib e
8 2024-01-25
编程技术问答社区
使用SqlBulkCopy插入到sql_variant列时,如何设置列类型
我正在使用sqlbulkcopy将.NET DataTable对象插入/更新到包含SQL_Variant列的SQL Server表.但是,当我需要的是'dateTime2'时,SQLBulkCopy坚持将DateTime值存储在该列中为SQL类型" DateTime". 我的数据定义是这样的: DataTable dataTable = new DataTable(); dataTable.Columns.Add(new DataColumn("VariantValue", typeof(object))); //this represents my sql_variant column 然后,我在其中扔了一些数据,需要一个" dateTime2"才能存储. DataRow row = dataTable.NewRow(); row[0] = DateTime.MinValue; dataTable.Rows.Add(row); 然后我使用sqlbulkcopy
2 2024-01-19
编程技术问答社区
如何使用SQL批量复制获取插入数据记录的标识
我有一个大约100,000个记录的Ado.net DataTable.在此表中有一个xyID列中没有值的列,因为该列是我的SQL Server数据库中的自动生成的IDENTITY. 我需要检索其他过程的生成的ID.我正在寻找一种方法,可以将此DataTable复制到SQL Server数据库中,并在同一"步骤"中使用生成的ID填充我的DataTable. 如何使用SqlBulkCopy类插入表中的记录的身份值? 解决方案 我目前正在做类似的事情: DataTable objects = new DataTable(); DataColumn keyColumn = new DataColumn("name", typeof(string)); DataColumn versionColumn = new DataColumn("version", typeof(int)); versionColumn.DefaultValue = iVersionID; ob
2 2024-01-19
编程技术问答社区
SqlBulkCopy错误处理/错误时继续
我正在尝试将大量数据插入SQL Server.我的目的地表的唯一索引称为"哈希". 我想用sqlbulkcopy替换我的sqldataadapter实现.在SQLDATAAAPTER中,有一个称为" ConsunupDateOnError"的属性,设置为true Adapter.update(Table)将插入所有可能的行,并使用RowerRor属性标记错误行. 问题是,我如何使用sqlbulkcopy尽快插入数据,同时跟踪哪些行被插入哪些行以及哪个行没有(由于唯一的索引)? ? 这是其他信息: 该过程是迭代的,通常设置为重复的时间表. 源和目标表可以是巨大的,有时甚至数百万行. 即使可以首先检查哈希值,它也需要每行两项交易(首先要从目标表中选择哈希,然后执行插入).我认为在适配器(表)的情况下,检查赛车手的速度比检查每行哈希命中率要快. 解决方案 sqlbulkcopy,具有非常有限的错误处理设施,默认情况下它甚至没有检查约束. 但是,它
4 2024-01-19
编程技术问答社区
如何在C#中的Sqlbulkcopy中添加列映射,其中列名包含白色空间
using (SqlBulkCopy sc = new SqlBulkCopy(conn)) { sc.DestinationTableName = destination; sc.ColumnMappings.Add("ID","ID #"); sc.ColumnMappings.Add("Amount","Amount in USD"); sc.WriteToServer(datatable); } 我在给定的列图中遇到错误的列剂量不匹配 预先感谢. 解决方案 找到的解决方案需要仅在列中涉及的白色空间 的情况下添加方括号
0 2024-01-06
编程技术问答社区
如何使用Dapper.Net的SQL批量拷贝?
我正在与Dapper .NET合作,以在SQL表中进行批量插入操作.我正在考虑使用Dapper .NET的用户SQKBULK复制,但没有任何经验如何与Dapper .NET .NET 一起使用Sqlbulkcopy 您的帮助非常感谢 解决方案 使用Dapper进行批量插入不是一个好主意,因为它不会快.最好的情况是使用
4 2024-01-06
编程技术问答社区
使用SQLBulkCopy-SQL Server 2016中的表比SQL Server 2014中的表大得多
我有一个使用SQLBulkCopy将数据移至一组表的应用程序.最近,它已经转移了使用SQL2016的用户正在报告其硬盘填充有很大数据库的问题(那不应该那么大).这个问题在SQL2014中不存在.经检查时,似乎运行tabledatasizes.sql(附加脚本)显示了unusedspacekb中的大量空间. 我想知道a)SQLServer 2016中是否有一些错误,或者我们使用SQLBULKCOPY是否使用新功能"相冲突".我注意到SQLServer 2016中的页面分配有一些更改.总的来说 - 是什么原因造成的? 复制步骤 注意 - 下面描述了我看到的情况,并删除了非必需信息.我实际上并没有在数据库表中存储数千个时间戳(其他列已删除). 在SQL中创建数据库(我称为testdb) 在该DB中创建一个表(使用脚本如下) USE [TestDB] GO /****** Object: Table [dbo].[2017_11_03_DM_Aggregated
4 2024-01-06
编程技术问答社区
在进行批量插入时,如何自动截断字符串?
我想将许多行(从实体框架对象构造)插入SQL Server.问题是,某些字符串属性的长度超过了数据库中的列长度,这会导致异常,然后所有的行都无法插入数据库. 所以我想知道是否有办法告诉SQLBulkCopy自动截断任何超长行?当然,如果每个属性超过有限的长度,我可以在插入数据台之前检查并划分,但是它会减慢整个程序. 解决方案 始终使用登台/加载表进行批量操作. 然后,您可以在冲洗到真实表之前处理,清洁,擦洗等数据.这包括,左,查找,de duplications等 so: 加载带有宽列的登台表 使用INSERT realtable (..) SELECT LEFT(..), .. FROM Staging 从分期到"真实"表的冲洗 其他解决方案 不幸的是,没有直接使用SqlBulkCopy进行此操作. SQL散装插入物质本质上几乎是"愚蠢的",但这就是为什么它们如此之快.它们甚至没有记录(除了捕获SqlRowsCopied事件),因此,如果某些
20 2024-01-05
编程技术问答社区
如何将CsvHelper记录添加到DataTable中,用于SqlBulkCopy到数据库中。
我正在尝试读取带有CSVHelper的CSV文件,将每个记录加载到数据表中,然后使用sqlbulkcopy将数据插入数据库表中.使用当前代码,将一行添加到数据表中时会得到例外.例外是:"无法施放类型的对象'mvcstockanalysis.models.stockprice'tote'system.iconvertible'.不得存储在日期列中.预期类型是日期时间." ." 示例CSV文件来自Yahoo Finance.例如: CSV文件包含以下标头: 日期打开高低关闭体积关闭 我正在阅读CSV文件的模型: namespace MvcStockAnalysis.Models { using System; using System.Collections.Generic; public partial class StockPrice { public int Id { get; set; } publ
2 2024-01-05
编程技术问答社区
SqlBulkCopy和DataTables与身份栏的父/子关系
我们需要更新几个表格,这些表基于父表中的身份键,该表由一个或多个子表称为外键. . 由于数据的大量,我们想在内存中构建这些表,然后使用C#中的sqlbulkcopy从数据集或单个数据表中更新数据库EN质量. 我们想从多个线程,流程和可能的客户端并行进行此操作. 我们在f#中的原型显示了很多希望,并增加了34倍的性能,但是该代码在父表中已知的身份值.当不强制时,当SQLBulkCopy插入行时,"身份列"确实在数据库中正确生成,但是身份值不会在内存数据列表中更新.此外,即使他们是,尚不清楚数据集是否会正确修复父/子女关系,以便随后使用正确的外键值编写子表. 任何人都可以解释如何使SQLBULKCOPY更新身份值,以及进一步配置数据集以保留和更新父/子关系的方式,如果在调用DataAdapter在单个数据标签上填充dataadapter时自动完成. 答案我不在寻找: 读取数据库以找到当前的最高身份值,然后在创建每个父行时手动递增它.不适用于多个流程/客户端,
4 2024-01-04
编程技术问答社区
SQL服务器的批量上传策略
我使用以下功能将数据从CSV上传到SQL表. 有更好的方法吗? 我现在很担心连接长期存在.因此需要减少. public bool SaveProxyBulkUploadData(List saveBulkUploadData) { try { foreach (AddServerPError addServetData in saveBulkUploadData) { DbCommand dbCmd = CitiScriptExecutionDB.GetStoredProcCommand("USP_HS_InsertProxyBulkUploadData"); CitiScriptExecutionDB.AddInParame
0 2024-01-04
编程技术问答社区
带有WellKnownText空间数据列的SqlBulkCopy DataTable
我试图批量复制DataTable,该>具有以下列: " id" - System.Int32 " GEOM" - System.String 进入带有以下列的SQL数据库: " ID" - int "形状" - geometry 任何人都可以就最佳方法提供建议吗? 一些测试代码是否有帮助... DataTable dataTable = new DataTable(); dataTable.Columns.Add("ID", typeof(Int32)); dataTable.Columns.Add("Geom", typeof(String)); dataTable.Rows.Add(1, "POINT('20,20')"); dataTable.Rows.Add(1, "POINT('40,25')"); dataTable.Rows.Add(1, "POINT('60,30')"); SqlBulkCopy sqlBulkCopy = n
4 2024-01-04
编程技术问答社区
是否可以使用System.Transactions.TransactionScope与SqlBulkCopy?
非常简单的问题:是否可以将System.Transactions.TransactionScope与SqlBulkCopy一起使用?文档交易和批量复制操作 (至少从.NET 4.0开始),我的测试表明它不会自动使用TransactionScope. 解决方案 SqlBulkCopy从不入选交易. SqlCommand也不这样做.常见的误解.征募是在SqlConnection.Open时进行的.之后,任何在该连接上运行的东西都是隐含交易的一部分.实际上,不再允许 通过显式交易. 如果要SqlBulkCopy使用TransactionScope在打开连接时必须设置交易. 必须设置交易. 这很容易做: using (var tran = new TransactionScope(...)) using (var conn = new SqlConnection(connStr)) { conn.Open(); //This enlists. using (
8 2024-01-03
编程技术问答社区
SqlBulkCopy如何工作
我熟悉C#sqlbulkcopy类,您可以在其中调用" WriteToserver"方法通过DataTable. 我的问题是SQL Server中的基本机制用于批量插入数据? 我问的原因是我想理解这些东西,以解决我是否可以在SQL中使用批量插入功能. 如果我编写了一个SQL语句,该语句准备了所有行以将其插入特定表(数千行)中的所有行插入到目标表中吗?像这样的事情就是我现在的做法, INSERT INTO sync_filters (table_name, device_id, road_id, contract_id) SELECT * FROM dbo.sync_contract_filters (@device_id) 和dbo.sync_contract_filters是生成所有行插入的函数.可以插入批量吗? 解决方案 sqlbulkcopy不会创建数据文件.它使用可用的通信协议(命名为Pipes,TCP/IP等)将数据表直接从.NET数
6 2024-01-03
编程技术问答社区
使用SqlBulkCopy时超时过期
我正在使用sqlbulkcopy从XML备份还原表.表备份之一是〜200MB大,并且有很多记录. 我有错误: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. 解决方案 您可能需要增加超时.尝试增加其他解决方案 有两种方法可以解决此错误: 默认增加超时为30秒,0表示无限. sqlBulkCopy.BulkCopyTimeout = {time in seconds} 默认情况下降低批次化,尝试将所有行插入一个批次 sqlBulkCopy.BatchSize = {no of rows you want to insert at once} 其他解决方案 更改 sqlCommand对象的属性. 连接字符串的连接超时属性确定sqlConnecti
4 2024-01-03
编程技术问答社区
如何使用SqlBulkCopyColumnMappingCollection?
我想制作一种通过参数传递特定数据的sqlbulkcopy方法. 现在我需要对其中一些进行映射.我不知道如何制作sqlbulkcopyColumnMappingCollection,因为那是我计划通过映射集合并使用它的计划.但是我不知道该怎么做.我不能做一个新的对象. 这就是我现在拥有的.我该如何添加它映射to to to tot tote? public void BatchBulkCopy(DataTable dataTable, string DestinationTbl, int batchSize) { // Get the DataTable DataTable dtInsertRows = dataTable; using (SqlBulkCopy sbc = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.KeepIdentity)) { sbc.De
6 2024-01-03
编程技术问答社区
SqlBulkCopy和Entity Framework
我当前的项目包括3个标准层:数据,业务和演示文稿.我想将数据实体用于我所有的数据访问需求.应用程序的一部分功能将需要将平面文件中的所有数据复制到数据库中.该文件不是那么大,因此我可以使用sqlbulkcopy.我发现了几篇有关在.NET中使用Sqlbulkcopy类使用的文章.但是,所有文章都使用DataTables来回移动数据. 是否有一种方法可以与SQLBulkCopy一起使用数据实体,或者我必须使用DataTables? 解决方案 您需要将实体转换为idatareader或DataTable. 有一个小型辅助班级,旨在协助以下协助: /projectRealeas.aspx?ReleaseId=389 编辑:MSDN链接被打破,可以在此处找到Alt副本: 然后您可以使用Sqlbulkcopy这样: var sbCopy= new SqlBulkCopy(connectionString); sbCopy.DestinationTableName =
0 2024-01-02
编程技术问答社区
SqlBulkCopy-将XML数据导入到SQL表中
我有使用SqlBulkCopy导入XML文件的预言. XML文件看起来像这样: 我的桌子看起来像这样: Int Id varchar Name 这是我的代码: DataSet ds = new DataSet(); ds.ReadXml(Server.MapPath("autolist.xml")); SqlConnection connection = new SqlConnection( ConfigurationManager.ConnectionStrings["Conne
0 2023-12-22
编程技术问答社区
使用SqlBulkCopy为每条插入的行触发火灾
我正在使用SqlBulkCopy类在表tbl_records中一次插入50k行 我已经在此表上设置了After Insert触发器,并使用以下代码 SqlBulkCopy SqlBc1 = new SqlBulkCopy(strConnString, SqlBulkCopyOptions.FireTriggers); // Set DataReader For SqlBulkCopy sqlComm = new SqlCommand(strQuery, sqlTemCon); sqlComm.CommandTimeout = 3600000; sqlComm.CommandType = System.Data.CommandType.Text; SqlDataReader dReader = sqlComm.ExecuteReader(); SqlBc1.WriteToServer(dReader); 但是执行后.它仅在50k插入的First First驱动触
8 2023-12-09
编程技术问答社区