在bigquery标准sql中将ipv6转换为整数

au9on6nz  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(588)

我厌倦了把ip地址转换成整数。它适用于ipv4,但在使用ipv6时,我遇到了一个错误,即
net.ipv4_to_int64()遇到非ipv4地址。预期为4字节,但得到16字节
如何同时转换ipv4和ipv6的ip地址?

a14dhokn

a14dhokn1#

如果需要将ipv6转换为十进制值,可以使用 JavaScript 自定义项如下所示。请记住,此操作产生的数值需要表示为字符串,因为它太大,无法放入 BigQuery 数字类型

  1. CREATE TEMP FUNCTION ipv6_to_number(ip STRING)
  2. RETURNS STRING
  3. LANGUAGE js AS """
  4. var parts = [];
  5. ip.split(":").forEach(function(it) {
  6. var bin = parseInt(it, 16).toString(2);
  7. while (bin.length < 16) {
  8. bin = "0" + bin;
  9. }
  10. parts.push(bin);
  11. })
  12. var bin = parts.join("");
  13. var dec = BigInt("0b"+ bin)
  14. return dec;
  15. """;
  16. Select "2001:0db8:0:0:8d3:0:0:0" ip, ipv6_to_number("2001:0db8:0:0:8d3:0:0:0") number

结果:

  1. Row ip number
  2. 1 2001:0db8:0:0:8d3:0:0:0 42540766411282592857539836924043198464
展开查看全部

相关问题