从string到bigint,或者相反-更喜欢什么?

p5fdfcr1  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(338)

上下文

我必须联接的两个表具有用于联接不同基础数据类型的相同列:

| --------- Table A -----------| | --------- Table B -----------| 
| Col_A (String) | Col_B | ... | | Col_A (Bigint) | Col_B | ... | 
|------------------------------| |------------------------------| 
| 1233456        | ...   | ... | | 1233456        | ...   | ... | 
|------------------------------| |------------------------------|

当然,如果两个表都有 Bigint 作为数据类型,但它是如何。因此,我必须在连接期间转换其中一个列。
因为答案可能非常依赖于所使用的数据库等:我使用的是 parquet -使用创建和查询的表 Impala 或者 Hive . 因此,对于表statistics,hive的metastore被使用。

问题

如果我想要计算成本较低的联接,我应该转换哪个列?
换言之:计算成本是否更高 StringBigint 或者反过来?
不幸的是,在我的集群中,我无法以可靠的方式测试计时。此外,我无法通过查看文档来回答这个问题。

-- The two join-options

-- Option 1: From String to Bigint
SELECT A.*
FROM A as A
INNER JOIN B as B on cast(A.Col_A as Bigint) = B.Col_A

-- Option 2: From String to Bigint
SELECT A.*
FROM A as A
INNER JOIN B as B on A.Col_A = cast(B.Col_A as String)
bvpmtnay

bvpmtnay1#

两种方法之间存在差异,这可能需要考虑: cast(A.col_A as Bigint) 可能导致错误 cast(B.Col_A as string) 从不产生错误
另一方面,转换为整数会删除前导零。这可能是好的也可能是坏的——这取决于它们是否有意义。
至于性能,我建议您在数据上都尝试一下,并了解哪个版本在您的系统上工作得更好。

相关问题