BigQuery 和 SQL 新手在这里。我在这里浏览了大查询支持的可能数据类型。我在 bigtable 中有一个类型的列,bytes
它的原始数据类型是 scala Long
。这bytes
已从我的应用程序代码转换为并存储在 bigtable 中。我正在尝试在 BigQuery UI 中执行CAST(itemId AS integer)
(itemId
列名在哪里),但输出CAST(itemId AS integer)
为 0 而不是实际值。我不知道该怎么做。如果有人能指出我正确的方向,那么我将不胜感激。
编辑:添加更多细节
示例itemId
是190007788462
以下是写入itemId
大表的代码。我已经包含了相关的方法。用于hbase client
写入大表。
import org.apache.hadoop.hbase.client._
def toPut(key: String, itemId: Long): Put = {
val TrxColumnFamily = Bytes.toBytes("trx")
val ItemIdColumn = Bytes.toBytes("itemId")
new Put(Bytes.toBytes(key))
.addColumn(TrxColumnFamily,
ItemIdColumn,
Bytes.toBytes(itemId))
}
以下是基于上述代码的大表中的条目
行列+单元格 foo 列=trx:itemId,值=\x00\x00\x00\xAFP]F\xAA
以下是从 scala 中的大表中读取条目的相关代码。这可以正常工作。Result
是一个org.apache.hadoop.hbase.client.Result
private def getItemId(row: Result): Long = {
val key = Bytes.toString(row.getRow)
val TrxColumnFamily = Bytes.toBytes("trx")
val ItemIdColumn = Bytes.toBytes("itemId")
val itemId =
Bytes.toLong(row.getValue(TrxColumnFamily, ItemIdColumn))
itemId
}
上面的getItemId
函数正确返回itemId
. 那是因为Bytes.toLong
它的一部分org.apache.hadoop.hbase.util.Bytes
正确地将字节字符串转换为长。
我正在使用与此类似的大查询 UI并使用CAST(itemId AS integer)
,因为 BigQuery 没有Long
数据类型。这错误地将itemId
字节字符串转换为整数,结果值为0
.
有什么方法可以让我在 BigQuery UI 中获得Bytes.toLong
等价物?hbase-client
如果没有,我还有其他方法可以解决这个问题吗?