我在RedShift中有一张桌子.如何查看它使用了多少磁盘空间?
我正在尝试使用python 2.5和2.7上的LXML解析器解析破坏的HTML
与LXML文档(http://lxml.de/parsing.html#parsing-html)不同,解析损坏的HTML不起作用:
from lxml import etree
import StringIO
broken_html = "<html><head><title>test<body><h1>page title</h3>"
parser = etree.HTMLParser()
tree = etree.parse(StringIO.StringIO(broken_html))
Run Code Online (Sandbox Code Playgroud)
结果:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "lxml.etree.pyx", line 2954, in lxml.etree.parse (src/lxml/lxml.etree.c:56220)
File "parser.pxi", line 1550, in lxml.etree._parseDocument (src/lxml/lxml.etree.c:82482)
File "parser.pxi", line 1578, in lxml.etree._parseMemoryDocument (src/lxml/lxml.etree.c:82764)
File "parser.pxi", line 1457, in lxml.etree._parseDoc (src/lxml/lxml.etree.c:81562)
File "parser.pxi", line 965, in lxml.etree._BaseParser._parseDoc (src/lxml/lxml.etree.c:78232)
File "parser.pxi", line 569, in lxml.etree._ParserContext._handleParseResultDoc (src/lxml/lxml.etree.c:74488)
File "parser.pxi", line 650, in …
Run Code Online (Sandbox Code Playgroud) 我发现MySQL的行为很奇怪:
我有一个带有变音字母的字符串,我在其上运行一些IF表达式.就像是:
IF(length(field) < 10, '', replace(field, "\n", "<BR>"))
Run Code Online (Sandbox Code Playgroud)
它工作正常.
但是,如果我通过CASE替换它,那么结果会在第一个unlaut字母上被删除!
CASE WHEN length(field)<10 THEN '' ELSE replace(field, "\n", "<BR>") END
Run Code Online (Sandbox Code Playgroud)
此外,我注意到只有在查询中还有GROUP BY部分时才会发生.
我无法理解CASE和IF之间的区别 - 从逻辑的角度来看,两者应该完全相同.
任何人都知道为什么这两个命令之间存在差异?
我有一个ElasticSearch索引,包含大约200M文档,总索引大小为90Gb.
我改变了映射,所以我希望ElasticSearch重新索引所有文档.
我编写了一个创建新索引(使用新映射)的脚本,然后遍历旧索引中的所有文档,然后将其放入新索引中.
它似乎有效,但问题是它的工作速度非常慢.它开始于两天前的300个文件/分钟,现在速度是150个文件/分钟.
该脚本在弹性搜索机器所在的同一网络中的机器上运行.
有了这样的速度,重新索引需要一个月才能完成.
有人知道一些更快的技术来重新索引弹性搜索索引吗?
谢谢!
红移是否有效(即二进制搜索)发现,是在A列排序,以便与条件A的查询表中的一个块=?
作为一个例子,让有用〜500米行的表T,〜50个场,分布和分类上场A.字段A具有高基数-所以有〜4.5米不同的A值,其中恰好在相同的行数T:每个值约100行.
假设具有单个XL节点的红移群集.
字段A未压缩.所有其他字段都有一些表单压缩,如ANALYZE COMPRESSION所示.与未压缩的表相比,给出1:20的比率.
给出一个简单的查询:
select avg(B),avg(C) from
(select B,C from T where A = <val>)
Run Code Online (Sandbox Code Playgroud)
在VACUUM和ANALYZE之后,给出了以下解释计划:
XN Aggregate (cost=1.73..1.73 rows=1 width=8)
-> XN Seq Scan on T (cost=0.00..1.23 rows=99 width=8)
Filter: (A = <val>::numeric)
Run Code Online (Sandbox Code Playgroud)
此查询需要39秒才能完成.
主要问题是:这是红移的预期行为吗?
根据选择最佳
排序键的文档 :"如果对一列进行频繁范围过滤或相等过滤,请将该列指定为排序键.Redshift可以跳过读取该列的整个数据块,因为它会跟踪最小值以及存储在每个块上的最大列值,并且可以跳过不适用于谓词范围的块. "
在选择排序键时:
"依赖于排序数据的另一个优化是范围限制谓词的有效处理.Amazon Redshift将列数据存储在1 MB磁盘块中.每个块的最小值和最大值都存储为元数据的一部分.如果范围限制列是排序键,则查询处理器能够使用最小值和最大值在表扫描期间快速跳过大量块.例如,如果表存储按日期排序的五年数据,查询指定一个月的日期范围,从扫描中可以消除多达98%的磁盘块.如果数据未排序,则必须扫描更多磁盘块(可能全部).有关这些优化的信息,请参阅选择分发键. "
次要问题:
在排序键上进行上述跳过扫描的复杂性是多少?它是线性的(O(n))还是二元搜索的一些变体(O(logn))?
如果密钥已排序 - 正在跳过唯一可用的优化?
在解释计划中,这种"跳过"优化会是什么样子?
以上是解释此查询可能的最佳方法吗?
在这种情况下,可以预期红移最快的结果是什么?
vanilla ParAccel在这个用例中有不同的行为吗?
我注意到我第一次在RedShift上运行查询时需要3-10秒.当我再次运行相同的查询时,即使在WHERE条件中使用不同的参数,它也会快速运行(0.2秒).查询我在谈论在一个包含3个整数列的约1M行的表上运行.
由RedShift第一次运行时编译查询,然后重新使用编译后的代码,导致执行时间的巨大差异?
如果是 - 如何始终保持编译查询的缓存温暖?
还有一个问题:给出queryA和queryB.我们假设queryA首先被编译和执行.queryB与queryA有多相似,这样queryB的执行将使用为queryA编译的代码?
我有一个包含4个节点的RedShift集群.
非常感谢!
我有一个关于pyes的问题(ElasticSearch的Python API).
是否可以使搜索方法返回找到的文档的键?
我使用的代码:
import pyes
conn = pyes.ES('localhost:9200')
q = pyes.StringQuery("november rain", default_operator="AND")
result = conn.search(query=q, indices=[index])
for r in result:
print r
Run Code Online (Sandbox Code Playgroud)
结果:找到了文档,没有保存文档的密钥(_id字段).
问题是如何返回_id键?
谢谢!
我有以下代码:
f = urllib.urlopen(url)
html = f.read()
Run Code Online (Sandbox Code Playgroud)
我想知道打开上面的url所带来的HTTP状态代码(HTTP 200,404等).
谁知道怎么做?
PS我使用python 2.5.
谢谢!!!