连接到 SAP Datasphere

作为 BigQuery 管理员,您可以创建一个连接来访问 SAP Datasphere 数据。借助此连接,数据分析师可以查询 SAP Datasphere 中的数据

准备工作

  1. 启用 BigQuery Connection API。

    启用 API

  2. 创建 SAP Datasphere 数据库用户。 记下 BigQuery 连接到的用户名、密码、主机名和端口。

  3. 通过执行以下任一操作,将 SAP Datasphere 租户配置为接受来自所选 IP 地址的流量:

    • 将所有 Google IP 地址范围添加到 SAP Datasphere 中“受信任的 IP”许可名单。
    • 通过将 0.0.0.0/0 添加到许可名单,向来自所有 IP 地址的连接开放 SAP Datasphere 租户。
    • 配置具有网络连接的连接,以便 BigQuery 从静态 IP 地址打开该连接。

    如需详细了解如何配置 SAP Datasphere 租户,请参阅将 IP 地址添加到 IP 许可名单

所需的角色

如需获得连接到 SAP Datasphere 所需的权限,请让管理员为您授予该项目的 BigQuery Connection Admin (roles/bigquery.connectionAdmin) IAM 角色。 如需详细了解如何授予角色,请参阅管理访问权限

您也可以通过自定义角色或其他预定义角色来获取所需的权限。

将 BigQuery 连接到 SAP Datasphere

您可以在 Google Cloud 控制台或 bq 命令行工具中将 BigQuery 连接到 SAP Datasphere。

控制台

  1. 在 Google Cloud 控制台中,转到 BigQuery 页面。

    转到 BigQuery

  2. 探索器面板中,点击添加添加

  3. 在搜索字段中,搜索并选择与外部数据源的连接

  4. 外部数据源对话框中,执行以下操作:

    • 对于连接类型,选择 SAP HANA
    • 连接 ID 部分,输入连接 ID 以标识此连接。
    • 对于位置类型,指定要与 SAP Datasphere 中的数据组合的 BigQuery 数据集的区域。使用此连接的查询必须从此区域运行。
    • 可选:对于易记名称,输入方便用户使用的连接名称,例如 My connection resource。易记名称可以是任何容易辨识的值,让您以后在需要修改连接资源时能够轻松识别。
    • 可选:对于说明,输入此连接资源的说明。
    • 对于加密,选择 Google 管理的加密密钥客户管理的加密密钥 (CMEK)。我们并不强制要求使用 CMEK。
    • 对于 Host:port:输入 SAP 数据库实例的主机和端口,如 SAP Datasphere Web 控制台数据库用户详细信息中所示,格式为 HOST:PORT
    • 可选:在网络连接字段中,输入网络连接的路径,以定义用于建立与 SAP Datasphere 的连接的网络配置。
    • 对于用户名:输入 SAP Datasphere Web 控制台数据库用户详细信息中的数据库用户名。例如 MY_SPACE#BIGQUERY
    • 对于密码:输入数据库用户的密码。
  5. 点击创建连接

bq

输入带有以下标志的 bq mk 命令:

  bq mk \
  --connection \
  --location=LOCATION \
  --project_id=PROJECT_ID \
  --connector_configuration '{
    "connector_id": "saphana",
    "endpoint": {
      "host_port": "HOST_PORT"
    },
    "authentication": {
      "username_password": {
        "username": "USERNAME",
        "password": {
          "plaintext": "PASSWORD"
        }
      }
    },
    "network": {
      "private_service_connect": {
        "network_attachment": "NETWORK_ATTACHMENT"
      }
    }
  }' \
  CONNECTION_ID

替换以下内容:

  • LOCATION:指定要与 SAP Datasphere 中的数据组合的 BigQuery 数据集的区域。使用此连接的查询必须从此区域运行。
  • PROJECT_ID:输入您的 Google Cloud 项目 ID。
  • HOST_PORT:输入 SAP 数据库实例的主机和端口,如 SAP Datasphere Web 控制台数据库用户详细信息中所示,格式为 HOST:PORT
  • NETWORK_ATTACHMENT(可选):以 projects/{project}/regions/{region}/networkAttachments/{networkattachment} 格式输入网络连接。使用此字段,您可以配置 SAP Datasphere 连接,以便 BigQuery 从静态 IP 地址打开该连接。
  • USERNAME:输入 SAP Datasphere Web 控制台数据库用户详细信息中的数据库用户名。例如 MY_SPACE#BIGQUERY
  • PASSWORD:输入数据库用户的密码。
  • CONNECTION_ID:输入连接 ID 以标识此连接。

与用户共享连接

您可以授予以下角色,以使用户可以查询数据并管理连接:

  • roles/bigquery.connectionUser:允许用户使用连接与外部数据源建立连接,并对其运行查询。

  • roles/bigquery.connectionAdmin:允许用户管理连接。

如需详细了解 BigQuery 中的 IAM 角色和权限,请参阅预定义的角色和权限

从下列选项中选择一项:

控制台

  1. 转到 BigQuery 页面。

    转到 BigQuery

    连接列在项目的外部连接组中。

  2. 探索器窗格中,点击您的项目名称 > 外部连接 > 连接

  3. 详细信息窗格中,点击共享以共享连接。之后,执行以下操作:

    1. 连接权限对话框中,通过添加或修改主账号与其他主账号共享连接。

    2. 点击保存

bq

您不能使用 bq 命令行工具共享连接。如需共享连接,请使用 Google Cloud 控制台或 BigQuery Connections API 方法共享连接。

API

使用 BigQuery Connections REST API 参考文档部分中的 projects.locations.connections.setIAM 方法,并提供一个 policy 资源实例。

Java

试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Java 设置说明进行操作。 如需了解详情,请参阅 BigQuery Java API 参考文档

如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证

import com.google.api.resourcenames.ResourceName;
import com.google.cloud.bigquery.connection.v1.ConnectionName;
import com.google.cloud.bigqueryconnection.v1.ConnectionServiceClient;
import com.google.iam.v1.Binding;
import com.google.iam.v1.Policy;
import com.google.iam.v1.SetIamPolicyRequest;
import java.io.IOException;

// Sample to share connections
public class ShareConnection {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "MY_PROJECT_ID";
    String location = "MY_LOCATION";
    String connectionId = "MY_CONNECTION_ID";
    shareConnection(projectId, location, connectionId);
  }

  static void shareConnection(String projectId, String location, String connectionId)
      throws IOException {
    try (ConnectionServiceClient client = ConnectionServiceClient.create()) {
      ResourceName resource = ConnectionName.of(projectId, location, connectionId);
      Binding binding =
          Binding.newBuilder()
              .addMembers("group:example-analyst-group@google.com")
              .setRole("roles/bigquery.connectionUser")
              .build();
      Policy policy = Policy.newBuilder().addBindings(binding).build();
      SetIamPolicyRequest request =
          SetIamPolicyRequest.newBuilder()
              .setResource(resource.toString())
              .setPolicy(policy)
              .build();
      client.setIamPolicy(request);
      System.out.println("Connection shared successfully");
    }
  }
}

后续步骤