google-bigquery - Bigquery - 在迁移的数据上创建代理键
问题描述
我们正在从 AWS Redshift 迁移到 GCP BigQuery。
问题陈述:我们有一个 Redshift 表,它使用 IDENTITY 列功能为自然/业务键发出内部 EDW 代理键 (PK)。这些自然密钥来自至少 20 个不同的客户源系统。我们需要一种方法来识别它们,以防自然键以某种方式重复(因为我们有很多源系统)。在 BigQuery 中,不存在 Redshift IDENTITY 列的功能。我如何在 BQ 中复制它?我们不能使用 GENERATE_UUID() 因为我们所有的下游客户在过去 4 年中一直在使用 BIGINT。所有历史都基于 BIGINT,对于 VARCHAR 需要更改太多。有没有人有任何想法、建议或建议?
我做了一些考虑: 1. 将数据加载到 Spark 中并将其保存在内存中,并使用 scala 或 python 函数来发出代理键。2. 使用 nosql 数据存储(但这似乎不太可能作为用例)。欢迎任何想法!
解决方案
在这些情况下,这个想法通常是识别一个单射/双射函数,它可以映射到一些独特的空间。
你试试类似的东西怎么样:你可以根据公司名称或其他东西以某种方式管理(使用语句或条件)的数字在SELECT UNIX_MICROS(current_timestamp()) + x as identity
哪里?x
case
if
如果您打算以某种顺序线性处理事物,例如一次一个业务实体,您也可以x
从此公式中消除。
希望能帮助到你。
推荐阅读
- python - 使用 numpy 数组作为循环蒙特卡洛的测试用例
- python - 根据来的人数,你预计在披萨上花多少钱
- c# - Linq 查询返回 coumn 值空句柄
- higher-kinded-types - 更高种类的商业案例
- java - 对象[] arr = {1,2,[3,4,[5]],6}; 这是可能的吗
- signal-processing - CWT 幅度是什么意思?
- json - 有条件地排除一个兄弟对象属性取决于 JSON Schema 中其他兄弟对象的属性
- hive - Apache Hive:重命名数组类型的列
> - pyspark - 您似乎正在尝试从广播变量、操作或转换中引用 SparkContext
- c++ - 命名空间中的 unordered_map 没有跨源文件“保存”其数据