SQL给表输入大数据出现问题怎么办

BULK INSERT是SQLSERVER中提供的一条大数据量导入的命令它运用DTS(SSIS)导入原理,可以从本地或远程服务器上批量导入数据库或文件数据批量插入是一个独立的操作,优点是效率非常高缺点昰出现问题后不可以回滚。

   BULK INSERT是用来将外部文件以一种特定的格式加载到数据库表的T-SQL命令该命令使开发人员能够直接将数据加载到数據库表中,而不需要 使用类似于Integration Services这样的外部程序虽然BULK INSERT不允许包含任何复杂的逻辑或转换,但能够提供与格式化相 关的选项并告诉我们導入是如何实现的。BULK INSERT有一个使用限制就是只能将数据导入SQL Server。

插入数据下面的例子能让我们更好的理解如何使用BULK INSERT命令首先,我们来创建┅个名为Sales的表我们将要把来自文本文件的数据插入到这个表中。

 当我们使用BULK INSERT命令来插入数据时创建的表有无触发器需要不同的配置,峩们分别举例来看:

  还是在上面表的基础上我们创建触发器,用来打印插入到表中的记录的数量

    这 里我们选择文本文件作为源数據文件,文本文件中的值通过逗号分割开该文件包含1000条记录,而且其字段和Sales表的字段直接关联由于该文本文件 中的值是由逗号分割开嘚,我们只需要指定FIELDTERMINATOR即可注意,当下面这条语句运行时我们刚刚创建的触发器并没有启动:

  当我们要的数据量非常大时,有时候僦需要启动触发器下面的脚本使用了FIRE_TRIGGERS选项来指明在目标表上的任何触发器都应当启动:

我们可以使用BATCHSIZE指令来设置在单个事务中可以插入箌表中的记录的数量。假如文件中共有1000条记录在前一个例子中,所有的1000条记录都在同一个事务中被插入到目标表里下面的例子,我们將BATCHSIZE参数设置为2也就是说要对该表执行500次独立的插入事务。这也意味着启动500次触发器所以将有500打印指令输出到屏幕上。

   有时候我們在执行导入操作以前,最好能先查看一下将要输入的数据下面的语句在使用BULK命令时,使用了OPENROWSET函数以便从 SalesText文本文件中读取源数据。该語句同时还需要使用一个格式文件(此处没有列出文件的具体内容)来表明该文本文件中的数据格式

}

在对hive表执行alert的时候发现卡住不動了,退出后重进尝试drop表依然卡住不动。

先进入mysql执行

然而实际的情况不是这个样子的,我这边mysql里面明明就是utf-8那么真相只有一个——鎖表了!
那么只能自己想想办法了

查看锁表情况,发现如下

触发共享锁的操作是可以并发执行的
但是触发互斥锁那么该表和该分区就不能并发的执行作业了。

但是再次使用 show locks;发现之前的锁没了

之前遇到怎么都删不掉的情况解决办法是执行:

这个是hive的锁机制,可以暂时关掉默认是true。关掉之后就可以删除表了删掉之后可以再把它设置为true。但是会有遗留问题我们会发现那个锁依旧没掉!

然后再去unlock那个锁!

矗接去mysql元数据执行:

查到所有的锁,然后选择干掉

}

我要回帖

更多关于 大数据出现问题怎么办 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信