我正在使用Google BigQuery来分析具有相同算法的多个客户端的数据。所有项目都有相同的位置。那些算法是视图。
是否可以仅在一个项目中拥有这些视图,并在不同的项目数据上运行它?
由于
答案 0 :(得分:1)
是。虽然view在一个项目中 - 其中引用的数据/表可以驻留在另一个项目中。
顺便说一句,使用这个"模型"你可以"分开"用户可以访问实际数据,只允许他们访问View,同时使用"授权视图"与此视图共享相应的数据集。选项
我不想为每个项目创建视图,但是要运行视图 不同的项目没有任何改变
一般来说,截至今天,这是不可能的! 直到Views将支持传递参数/参数或类似的东西
尽管如此,我还是看到了以下特定案例的一个选项!
如果你有完全相同的逻辑和数据模式,只有不同客户的不同之处是项目 - 你应该使用类似下面的东西(只是一个想法来探索)
SELECT * FROM
(SELECT * FROM [projectA:dataset.table] WHERE CURRENT_USER() IN ('name1@clientA.com', 'name2@clientA.com')),
(SELECT * FROM [projectB:dataset.table] WHERE CURRENT_USER() IN ('name1@clientB.com', 'name2@clientB.com')),
(SELECT * FROM [projectC:dataset.table] WHERE CURRENT_USER() IN ('name1@clientC.com', 'name2@clientC.com'))
因此,取决于运行View的用户 - 将提供相应的数据 当然在这种情况下 - 使用授权视图作为共享数据的选项是必须的,因此clientA无法访问ClientB或ClientC数据
以上示例可以修改为
SELECT * FROM
(SELECT *, 'ClientA' AS client FROM [projectA:dataset.table]),
(SELECT *, 'ClientB' AS client FROM [projectB:dataset.table]),
(SELECT *, 'ClientC' AS client FROM [projectC:dataset.table])
所以视图可以如下使用
SELECT * FRIN YourView WHERE client = 'ClientB'
重要
请注意,上述抽象/理论选项将导致您在每次运行时查询所有涉及的项目。即使您将获得仅与特定项目/客户相关的结果 我不认为你希望这种情况发生