我在Hbase中有一个表让我们说"tbl",我想用Hive查询它.因此,我将表格映射到hive,如下所示:
CREATE EXTERNAL TABLE tbl(id string, data map<string,string>)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,data:")
TBLPROPERTIES("hbase.table.name" = "tbl");
Run Code Online (Sandbox Code Playgroud)
查询如下:
select * from tbl", "select id from tbl", "select id, data
from tbl
Run Code Online (Sandbox Code Playgroud)
真的很快
但查询喜欢
select id from tbl where substr(id, 0, 5) = "12345"
select id from tbl where data["777"] IS NOT NULL
Run Code Online (Sandbox Code Playgroud)
非常慢.
相反,从Hbase shell运行时:
"scan 'tbl', {
COLUMNS=>'data', STARTROW='12345', ENDROW='12346'}" or
"scan 'tbl', { COLUMNS=>'data', "FILTER" =>
FilterList.new([qualifierFilter('777')])}"
Run Code Online (Sandbox Code Playgroud)
它闪电般快!
当我查看由jobtracker上的hive生成的mapred作业时,我发现"map.input.records"计算Hbase表中的所有项目,这意味着作业在它甚至启动任何映射器之前进行全表扫描!此外,我怀疑它在执行之前将所有数据从Hbase表复制到hdfs到mapper tmp输入文件夹.
所以,我的问题是 - 为什么hive的hbase存储处理程序不会将hive查询转换为适当的hbase函数?为什么它扫描所有记录然后使用"where"子句对它们进行切片?怎么改进?
任何提高Hive查询性能的建议(映射到HBase表).
我们可以在HBase表上创建二级索引吗?
我们正在使用HBase和Hive集成并尝试调整Hive查询的性能.
我有类似的字符串"align is going to school sad may me".我想在四个空格后得到子字符串.字符串将在运行时输入.任何人都可以建议我在一些空格后找到Sub String ......
String st = "align is going to school sad may me";
int i = 0;
String [] strings = new String [15];
StringTokenizer stringTokenizer = new StringTokenizer (st, " ");
while (stringTokenizer.hasMoreElements ())
{
strings [i]= (String)stringTokenizer.nextElement ();
i++;
}
System.out.println ("I value is" + i);
for (int j=4; j<i; j++)
{
System.out.print (strings[j] + " ");
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试了这个,它的工作可以请你建议我在一些空格后找到Sub字符串的简单方法.
我正在尝试将一堆文件从ASCII转码为UTF-8.
为此,我尝试使用iconv:
iconv -f US-ASCII -t UTF-8 infile > outfile
Run Code Online (Sandbox Code Playgroud)
-f ENCODING 输入的编码
-t ENCODING 输出的编码
该文件仍未转换为UTF-8.它是一个.dat文件.
在发布之前,我搜索了Google并找到了以下信息:
ASCII是UTF-8的子集,因此所有ASCII文件都已经过UTF-8编码.ASCII文件中的字节和"将其编码为UTF-8"所产生的字节将完全相同.它们之间没有区别.
上述链接仍无济于事.
即使它是ASCII格式,它也支持UTF-8,因为UTF-8是一个超级集合,另一方要接收我的文件需要文件编码为UTF-8.他只需要文件格式为UTF-8.
请给我任何建议.
我在64位编译器上执行了一个java程序,并为该程序生成了字节代码.是否可以在32位编译器上运行相同的字节代码而不会丢失数据?
在我的程序中,我已经x=10024在64位编译器上声明了一个变量?
那么32位编译器中x的值是多少?如果x的值相同,如何在不丢失数据的情况下如何?你能详细说明吗?