所以我一直在和BULK INSERT一起解决一个令人困惑的问题.这些文件来自Linux盒子,当我以十六进制编辑模式/ notepad ++查看它们时,它们似乎只有一个换行符(0A)作为行终止符.我将批量插入语句存储在一个表中,以后作业将从中选择并执行表中的语句以将数据加载到临时表中.
困扰我的特殊情况是一个包含7列的表.数据文件只有前4列,其余应为NULL.
通常它们看起来像这样:
BULK INSERT STAGING_TABLE FROM 'FILE_LOCATION'
WITH (
DATAFILETYPE = 'widechar'
, FIELDTERMINATOR = ','
, ROWTERMINATOR = 'something_here'
);
Run Code Online (Sandbox Code Playgroud)
行终止符是我问题的最大来源.
当我尝试使用"\n"时,批量插入在截断错误上失败 - 它似乎将文件视为一个长字符串,并且只能正确地分隔列,直到它用完列(因此截断错误).
当我使用"0x0a"时,批量插入在"意外的文件结束"错误时失败.文件末尾有一个空白行,但即使我删除它仍然会抛出相同的错误,所以我不确定那里有什么问题.
到目前为止,唯一一个用于将数据实际存入表格的工作是"\ l".有谁知道这意味着什么?我搜索的范围很广,但似乎没有关于它的文档.那个或我一直在找错了地方.
与\ l作为rowterminator的奇怪之处在于,即使它成功加载,它仍然不尊重rowterminator ......行只是被加载到所有7列并且以看似随机的间隔分割.
任何人都有任何想法?我应该澄清一些吗?
我有一个定义,构建一个由UTF-8编码字符组成的字符串.输出文件使用'w+', "utf-8"参数打开.
但是,当我试着x.write(string)去拿UnicodeEncodeError: 'ascii' codec can't encode character u'\ufeff' in position 1: ordinal not in range(128)
我认为这是因为通常你会做`print(u'something').但我需要使用一个变量和U中的语录" _ "否定的是...
有什么建议?
编辑:这里的实际代码:
source = codecs.open("actionbreak/" + target + '.csv','r', "utf-8")
outTarget = codecs.open("actionbreak/" + newTarget, 'w+', "utf-8")
x = str(actionT(splitList[0], splitList[1]))
outTarget.write(x)
Run Code Online (Sandbox Code Playgroud)
基本上所有这一切应该是为我构建大量类似于此的字符串:
[??? Deliverables]= CASE WHEN things = 11
THEN C ELSE 0 END
我一直在使用SSTableLoader实用程序在两个不同的Cassandra集群之间批量传输数据,我想知道是否有其他人遇到过同样的问题.源群集具有数据,目标不具有数据.
我已经阅读了关于实用程序详细信息的数据存储页面,但我仍然有一些未解决的问题,关于它是如何工作的.
我在源群集的实时节点上使用该实用程序,命令遵循以下格式:
sstableloader -d target.host.ip -v -f /etc/cassandra/cassandra.yaml /cassandra/data/keyspace1/table1-uuid
Run Code Online (Sandbox Code Playgroud)
这些集群都设置有256个vnode,每个节点在每个集群中有6个节点.在两种环境中,模式都是RF = 3,并且这些表的结构都相同.
所以我的问题如下:
1)该实用程序从您指定的cassandra.yaml中提取源群集信息,但您必须指定SSTables的绝对路径.那么从单个节点运行SSTableLoader一旦完成就会在目的地给我整个表吗?由于令牌范围在目标集群上不同,因此似乎很难验证.
2)数据存储信息说:
要从SSTable加载获得最佳吞吐量,您可以使用多个sstableloader实例来跨多台计算机进行流式处理.Sstableloader可以同时运行的SSTable数量没有硬性限制,因此您可以添加其他加载器,直到您看不到进一步的改进.
这是否意味着对于单个表,我会在多个源计算机上启动多个SSTableLoader实例?或者它只是意味着我可以同时在多台机器上为多个不同的表使用SSTableLoader.我试图了解他们提到的吞吐量增益是针对单个表还是仅用于飞行中的多个表.
3)从快照运行需要什么语法修改?我拍摄了一张快照并通过运行相同的命令进行了测试,但是进一步向下进入了表的快照目录,它没有正确解析它说"快照"是一个无效的密钥空间.
无论如何,谢谢希望我对我的问题很清楚.
想知道为什么这个查询执行缓慢.如果有人可以告诉我如何处理它将是伟大的.被查询的DB有超过5亿行.这个查询是否真的写得不好,以至于TOP 10需要很长时间才能完成它可能永远不会完成?假设我仍然希望按月+年查询数据,我该如何改进查询?
SELECT TOP 10 *
FROM ADB.dbo.Stuff tt
WHERE MONTH(tt.SomeDate) = 5
AND
YEAR(tt.SomeDate) = 2011
Run Code Online (Sandbox Code Playgroud)
SELECT TOP 10不仅在获得10个结果后停止吗?还是需要这么长时间,因为它在通过500米+行时还没有找到我的条件?
谢谢,抱歉这么简单的问题.
sql ×2
bulkinsert ×1
cassandra ×1
datastax ×1
encoding ×1
performance ×1
python ×1
python-2.7 ×1
scylla ×1
utf-8 ×1