谷歌BigQuery

本文描述了如何读和写谷歌在砖BigQuery表。

砖推荐使用服务帐户的电子邮件验证BigQuery能够进行身份验证。基于密钥的验证也覆盖了作为一个选项在这篇文章中,但它是更不安全密钥泄漏的风险。

需求

权限

你的项目必须有特定的谷歌使用BigQuery读写权限。

请注意

本文讨论了BigQuery物化视图。,谷歌的文章介绍了物化视图。学习其他BigQuery术语和BigQuery安全模型,看到谷歌BigQuery文档

读写数据与BigQuery取决于两个谷歌云项目:

  • 项目(项目):砖的谷歌云项目ID读取或写入BigQuery表。

  • 父项目(parentProject):父项目的ID,它默认为谷歌的云项目与谷歌相关数据砖工作区部署的服务帐户。

如果你不提供这些值显式地,两个值默认为该项目与您所使用的服务帐户进行身份验证。这适用于两种身份验证方法:一个服务帐户的电子邮件地址(推荐方法)或钥匙JSON文件。

可选设置项目parentProject明确,使用类似于下面的代码。取代<项目id >与你的项目ID。取代< parent-project-id >你的父项目ID。

火花格式(“bigquery”)\选项(“表”,)\选项(“项目”,<项目- - - - - -id>)\选项(“parentProject”,<- - - - - -项目- - - - - -id>)\负载()

所需的权限取决于谷歌云项目项目parentProject都是一样的。下面的章节列表为每个场景所需的权限。

如果需要权限项目parentProject匹配

如果你的id项目parentProject是相同的,使用下面的表格来确定最小权限:

砖的任务

谷歌在这个项目所需的权限

读BigQuery表没有物化视图

项目项目:

  • BigQuery读会话的用户

  • BigQuery数据查看器(可选格兰特在数据集/表级别而不是在项目级别)

读BigQuery表与物化视图

项目项目:

  • BigQuery工作用户

  • BigQuery读会话的用户

  • BigQuery数据查看器(可选格兰特在数据集/表级别而不是在项目级别)

实体化的项目:

  • BigQuery数据编辑器

写一个BigQuery表

项目项目:

  • BigQuery工作用户

  • BigQuery数据编辑器

如果需要权限项目parentProject是不同的

如果你的id项目parentProject是不同的,使用下面的表格来确定最小权限:

砖的任务

谷歌需要权限

读BigQuery表没有物化视图

parentProject项目:

  • BigQuery读会话的用户

项目项目:

  • BigQuery数据查看器(可选格兰特在数据集/表级别而不是在项目级别)

读BigQuery表与物化视图

parentProject项目:

  • BigQuery读会话的用户

  • BigQuery工作用户

项目项目:

  • BigQuery数据查看器(可选格兰特在数据集/表级别而不是在项目级别)

实体化的项目:

  • BigQuery数据编辑器

写一个BigQuery表

parentProject项目:

  • BigQuery工作用户

项目项目:

  • BigQuery数据编辑器

步骤1:设置谷歌云

启用BigQuery存储API

BigQuery存储API是默认启用BigQuery启用新的谷歌云项目。然而,如果你有一个现有的项目和BigQuery存储API不启用,遵循本节中的步骤来启用它。

您可以启用BigQuery存储API使用谷歌云CLI或谷歌云控制台。

使云CLI BigQuery存储API使用谷歌

gcloud服务启用bigquerystorage.googleapis.com

使BigQuery存储API使用谷歌云控制台

  1. 点击api和服务在左侧导航窗格。

  2. 单击使api和服务按钮。

    谷歌支持服务
  3. 类型bigquery存储api在搜索栏并选择第一个结果。

    谷歌BigQuery存储
  4. 确保启用了BigQuery存储API。

    谷歌BigQuery

创建一个谷歌服务占砖

创建一个服务帐户的砖集群。砖推荐给这个服务帐户所需的最小特权来执行其任务。看到BigQuery角色和权限

您可以创建一个服务帐户使用Google云CLI或谷歌云控制台。

创建一个谷歌服务帐户使用谷歌云CLI

gcloud我服务帐户创建<服务帐户名称> gcloud项目add-iam-policy-binding <项目名称>\角色/ bigquery.user——的作用\——成员=“serviceAccount: <服务帐户名称> @ <项目名称> .iam.gserviceaccount.com”gcloud项目add-iam-policy-binding <项目名称>\角色/ bigquery.dataEditor——的作用\——成员=“serviceAccount: <服务帐户名称> @ <项目名称> .iam.gserviceaccount.com”

砖推荐使用服务帐户的电子邮件验证,但如果你选择使用基于密钥的验证,为您的服务帐户创建密钥通过以下几点:

gcloud服务- - - - - -账户创建- - -- - - - - -账户\“<服务帐户名称> @ <项目名称> .iam.gserviceaccount.com”\<项目- - - - - -的名字> - - -xxxxxxxxxxxjson

创建一个谷歌服务帐户使用谷歌云控制台

创建帐户:

  1. 点击我和管理在左侧导航窗格。

  2. 点击服务帐户

  3. 点击+创建服务帐户

  4. 输入服务帐户名称和描述。

    谷歌创建服务帐户
  5. 点击创建

  6. 对你的服务帐户指定的角色。在选择一个角色下拉,类型BigQuery,并添加以下角色:

    谷歌的权限
  7. 点击继续

  8. 点击完成

砖推荐使用服务帐户的电子邮件验证,但如果你选择使用基于密钥的验证,为您的服务帐户创建密钥通过以下几点:

  1. 服务帐户列表中,单击您新创建的帐户。

  2. 在关键部分,选择添加键>创建新的键按钮。

    谷歌创建密钥
  3. 接受JSON密钥类型。

  4. 点击创建。JSON关键文件被下载到你的电脑。

    重要的

    JSON密钥文件生成的服务帐户是一个应该共享只有授权用户的私钥,因为它控制访问数据集和资源云在你的谷歌账户。

创建一个谷歌云存储(GCS)为临时存储桶

BigQuery能够写入数据,数据来源需要访问GCS桶。

  1. 点击存储在左侧导航窗格。

  2. 点击创建桶

    谷歌创建桶
  3. 配置桶的细节。

    谷歌桶细节
  4. 点击创建

  5. 单击权限选项卡,添加成员

  6. 提供以下的服务帐户权限桶。

    谷歌桶权限
  7. 点击保存

第二步:设置数据砖

砖推荐使用服务帐户的电子邮件验证,但这里还包括基于密钥的验证说明。

建立一个集群使用基于密钥的认证

当你配置您的集群使用集群编辑器,单击高级选项,单击火花配置选项卡,并添加以下引发配置。取代< base64-keys >与你的base64编码JSON密钥文件。更换其他物品在括号中(如< client-email >这些字段的值来自你的JSON密钥文件。

凭证< base64-keys >spark.hadoop.google.cloud.auth.service.account。实现真正的spark.hadoop.fs.gs.auth.service.account。电子邮件< client-email >spark.hadoop.fs.gs.project。id <项目id >spark.hadoop.fs.gs.auth.service.account.private。关键<私有密匙>spark.hadoop.fs.gs.auth.service.account.private.key。id < private-key-id >

读和写BigQuery表

阅读BigQuery表,指定

df=火花格式(“bigquery”)选项(“表”,<- - - - - -的名字>)负载()

写信给一个BigQuery表,指定

df格式(“bigquery”)模式(“<模式>”)选项(“temporaryGcsBucket”,“< bucket名>”)选项(“表”,<- - - - - -的名字>)保存()

在哪里< bucket名>斗中创建的名称吗创建一个谷歌云存储(GCS)为临时存储桶

从BigQuery创建外部表

重要的

这个功能不支持统一目录。

你可以声明一个非托管表数据砖将直接从BigQuery读取数据:

创建chosen_datasettest_table使用bigquery选项(parentProject“gcp-parent-project-id”,项目“gcp-project-id”,temporaryGcsBucket“some-gcp-bucket”,materializationDataset“some-bigquery-dataset”,“some-bigquery-dataset.table-to-copy”)

Python笔记本的例子:一个谷歌BigQuery表加载到DataFrame

下面的Python笔记本谷歌BigQuery表装入一个砖DataFrame。

谷歌BigQuery Python示例笔记本

在新标签页打开笔记本

Scala笔记本的例子:一个谷歌BigQuery表加载到DataFrame

以下Scala笔记本谷歌BigQuery表装入一个砖DataFrame。

谷歌BigQuery Scala样本笔记本

在新标签页打开笔记本