我的情况是扫描仪返回的行中缺少值。
我的密钥看起来像这个company_recordtype_recordid_childrecordtype_childrowid
%id值是guids。
我正在使用C#,Azure HDInsights(HBase)和Microsoft.HBaseClient来完成这项工作。
如果我创建像这样的扫描仪
Scanner scanSettings = new Scanner()
{
batch = 10,
startRow = Encoding.UTF8.GetBytes(myrowkey),
endRow = Encoding.UTF8.GetBytes(myrowkey + "~")
};
myrowkey看起来像companya_salesrecord_guid_receipt_ Start看起来像那样,End看起来像companya_salesrecord_guid_receipt_guid(s),其中guid(s)表示该salesrecord有很多收据(只是一个愚蠢的例子)
如果我想查找与该salesrecord相关的所有收据,它应该带回所有行值,或者我认为。
现在每行至少有8个columndata值,因为它们是必需的,我已经确认它们存在。我还有一个蜂巢盖表,它显示了所有,没有部分奇怪的行。仅HiveTable中的NULLS,其中值不存在,而完全值存在于其中。
当我执行实际代码时,我随机获取的行只包含... 3行值,而其中99%都是8行值。
如果我然后将完整的密钥带到只有部分值的数据行(如3)..并使用完全相同的代码,但限定整个密钥,我得到所有的值。
我完全迷失了如何解决这个问题......甚至调试这个问题,所以任何想法都会得到真正的体会。
答案 0 :(得分:0)
您可能误解了Scan的batch
参数意味着什么。 batch
参数设置扫描在每次RPC调用时返回的单元的数量,并且通常仅在具有大量列的行时使用。你真正想要的是caching
参数 - 它控制每个RPC扫描获得的行的数量。