通过 Action Hub 共享数据

除了将内容传递到 Looker 的内置目标位置之外,您还可以使用操作(也称为集成)将内容传递到通过操作中心服务器与 Looker 集成的第三方服务。

本页将引导您了解如何构建自定义操作,您可以请求将其添加到 Looker Action Hub 添加到您自己的私有 Action Hub 服务器。本页面还介绍了如何启动本地操作中心服务器,以测试自定义操作或运行私有操作中心服务器。

如需开始使用操作,您可以执行以下任一操作:

将操作添加到操作中心后,Looker 管理员可以启用该操作,以便在将 Looker 内容交付给这些服务时使用。

如果您想通过 Looker Action Hub 使用 Looker 的集成,同时托管自己的私有或自定义操作,还可以设置多个操作中心。每个操作中心的相应操作都会显示在管理面板的操作页面上。

Looker Action Hub

Looker 托管并提供 Looker Action Hub,这是一个实现 Looker 的 Action API 并公开热门操作的无状态服务器。用户通过操作发送的任何数据都将在 Looker Action Hub 服务器上临时处理,而不是在 Looker 实例中处理。

Looker 已与多种服务集成。如需了解如何启用这些现有服务,请参阅管理员设置 - 操作文档页面。

Looker Action Hub 要求

Looker Action Hub 必须能够通过以下方式发送和接收 API 请求:

如果您的 Looker 部署无法满足这些要求,或者您的 Looker 实例上启用了 IP 许可名单功能,请考虑设置本地操作中心服务器来提供私有 Looker 集成自定义操作。客户自托管实例的管理员还可以专门为 OAuth 和流式传输操作部署本地操作服务器

从 Looker 实例到 Looker Action Hub 网络的请求

actions.looker.com 的请求会解析为动态 IP 地址。Looker 实例发出的出站请求必须能够到达以下端点:

actions.looker.com/
actions.looker.com/actions/<name>/execute
actions.looker.com/actions/<name>/form

其中,name 是操作的程序化名称

从 Looker 用户的浏览器发送到 Looker Action Hub 网络的请求

Looker 用户的浏览器必须能够向以下 Looker Action Hub 端点发出请求(针对 OAuth):

actions.looker.com/actions/<name>/oauth

其中,name 是操作的程序化名称

从 Looker Action Hub 网络到 Looker 实例的请求

Looker Action Hub 必须向 Looker 实例请求执行支持流式结果或使用 OAuth 的操作。

流式处理操作可让操作使用提供所有结果的查询。启用 OAuth 的操作通过 OAuth 2.0 流程使用用户级身份验证。OAuth 操作必须在其源 Looker 实例中存储用户凭据,因为 Looker 操作中心是无状态的多租户,不会存储任何类型的用户专用凭据。

Looker Action Hub 向 Looker 实例发出的请求采用以下格式:

GET <host_looker_url>/downloads/<random_40_char_token>
POST <host_looker_url>/action_hub_state/<random_40_char_token>

这些网址会在 Looker 实例中即时生成,然后再发送到 Looker Action Hub。因此,Looker 操作中心需要能够将 <host_looker_url> 解析为 IP 地址 ,并向 Looker 实例所在的网络发出请求。

Looker 操作中心具有静态出站 IP 地址,请求将始终来自这些地址:35.153.89.114104.196.138.16335.169.42.87。如果 Looker 托管实例的管理员已启用 IP 许可名单,则必须添加这些 IP 地址,才能使用支持流式结果或使用 OAuth 的任何操作。

客户自托管实例的注意事项

如需使用 Looker 集成,Looker Action Hub 必须能够与 Looker 实例通信,并满足 Looker Action Hub 要求。由于各种原因,客户托管的 Looker 实例有时无法实现这一点。如果 Looker Action Hub 与 Looker 实例之间无法进行双向通信,Looker Action Hub 可能会出现意外或不良行为,例如挂起的查询或不可用的操作。

为了解决 Looker 操作中心可能无法与 Looker 实例通信的问题,Looker 管理员可以实施本页面稍后介绍的解决方案之一。合适的解决方案或解决方案组合将取决于 Looker 实例的架构:

  • 如果 Looker Action Hub 无法解析客户托管的实例(即 Looker Action Hub 无法接收来自 Looker 实例的请求),Looker 管理员可以联系 Google Cloud 销售专家来启用 public_host_url 许可功能。该许可功能会显示 --public-host-url 启动选项,管理员可以通过该选项指定可解析的 <public_host_url> 主机名,该主机名不同于实例 <host_looker_url>public_host_url 会替换某些特定 Looker Action Hub 回调网址的主机名,并通过具有 public_host_url 作为公开可解析名称的反向代理来路由这些回调网址。此反向代理仅接受来自 Looker Action Hub 的静态出站 IP 地址的请求;使用此方法的 Looker 管理员必须将 Looker Action Hub 向 Looker 实例发出请求的出站 IP 地址(35.153.89.114104.196.138.16335.169.42.87)添加到许可名单中。

  • 如果 Looker 实例可以解析客户托管的实例网址,但 Looker Action Hub 无法向 Looker 实例发送请求,用户可能无法配置或使用支持流式结果或使用 OAuth 的操作。为解决此问题,Looker 管理员必须将 Looker Action Hub 向 Looker 实例发出请求的出站 IP 地址(即 35.153.89.114104.196.138.16335.169.42.87)添加到许可名单中。

  • 如果上述两种解决方案都不适合 Looker 实例架构,Looker 管理员可以部署客户托管的操作中心,以用于所有操作,或者仅用于支持流式结果或使用 OAuth 的操作。

  • 如需部署客户托管的操作中心,您必须确保 JAR 文件托管在公共服务器上,以便 Looker 操作中心可以与其通信。不过,我们不建议您使用此解决方案。

此外,如果客户托管的 Looker 实例使用的 SSL 证书是由不在根证书列表中的证书授权机构 (CA) 颁发的,则该实例可能无法使用 OAuth 和流式传输操作。

构建自定义操作

本部分介绍如何使用 Looker Action Hub 源代码编写和测试自定义操作。如需查看功能性代码示例,请查看 GitHub 中 looker-open-source/actions 代码库中的现有操作。

您可以通过以下方式创建自定义操作:

  1. 设置开发代码库
  2. 编写操作
  3. 测试您的操作
  4. 在 Looker Action Hub 或您自己的私享 Action Hub 服务器中发布并启用操作

与任何操作一样,您可能需要先使用特定参数配置 LookML 模型,然后才能使用该操作交付数据。

设置开发代码库

Looker 操作中心是一个用 TypeScript 编写的 Node.js 服务器,它是现代 JavaScript 之上的一小层,可添加类型信息来帮助捕获编程错误。如果您熟悉 JavaScript,那么 TypeScript 语言的大部分内容对您来说应该都不陌生。

运行 Looker Action Hub 需要以下软件:

  • Node.js
  • Node Version Manager (NVM - 用于选择合适的 Node.js 版本)
  • Yarn(用于管理依赖项)

安装完所需软件后,您就可以开始设置开发环境了。以下示例使用 Git。

  1. 在本地克隆 looker-open-source/actions 代码库:

    git clone git@github.com:looker-open-source/actions.git
    
  2. actions/src/actions 目录中创建一个以您的操作名称命名的目录。例如:

    mkdir actions/src/actions/my_action
    
  3. 开始使用执行操作所需的文件填充目录。如需查看示例文件结构,请参阅 actions GitHub 代码库

Looker 建议您同时添加以下内容:

  • 用于说明您的 action 的身份验证目的和方式的 README
  • 要在 Looker Action Hub(或 Looker 实例上的私有 Action Hub)和 Looker 数据传送窗口中显示的 PNG 图标
  • 您希望针对操作代码运行的任何测试文件 - 这与测试操作不同

编写操作

Looker Action Hub 服务器的设计要求是完全无状态,因此不允许在操作应用或服务中存储任何信息。满足操作所需的所有信息都必须在操作文件的请求调用中提供。

操作文件的具体内容会因服务、操作所针对的类型或级别以及需要指定的数据或可视化图表格式而异。还可以为 OAuth 2.0 授权流程配置操作

操作文件基于 /execute API 方法。每次用户在 Looker 中执行操作时,Looker API 请求都会传递 DataActionRequestDataActionRequest 包含执行操作所需的所有数据和元数据。此外,您还可以使用 /form 方法,在用户执行操作之前收集更多信息。用户选择将数据发送到 /form 中指定的字段时,这些字段会显示在发送安排弹出式窗口中。

编写操作文件时,请在操作定义中至少包含以下标记为必需的参数:

参数 必需 说明 数据类型
name 操作的唯一名称。在 Looker Action Hub 中的所有操作中,此值应该是唯一的。 字符串
url 相应操作的 /execute 端点的绝对网址。 字符串
label 直观易懂的操作标签。 字符串
supportedActionTypes 相应操作支持的操作类型列表。有效值为 "cell""query""dashboard" 字符串
formURL 相应操作的 /form 端点的绝对网址。 字符串
description 操作的说明。 字符串
params 相应操作的 parameters 数组。以字符串格式为每个参数添加名称、标签和说明。这些字段会显示在管理面板中操作的启用页面上。如需管理用户向操作目的地传送数据的方式,您可以指定用户必须具有已定义值的用户属性 parameters
supportedFormats 相应操作支持的数据格式列表。有效值包括 "txt""csv""inline_json""json""json_detail", "json_detail_lite_stream", "xlsx", "html", "wysiwyg_pdf", "assembled_pdf", and "wysiwyg_png". 字符串
supportedFormattings 操作支持的格式设置选项列表。有效值为 "formatted""unformatted" 字符串
supportedVisualizationFormattings 操作支持的可视化图表格式设置选项列表。有效值为 "apply""noapply" 字符串
iconName 表示相应操作的图标图片的数据 URI。 字符串
requiredFields 此操作兼容的必需字段的说明列表。如果此列表中有多个条目,则表示相应操作需要多个字段。 RequiredField
supportedDownloadSettings 一个布尔值,用于确定是否会向操作发送一次性下载网址,以实现无限的数据流式传输。该参数由 usesStreaming 参数设置,后者是一个 true/false 布尔值。如果值为 usesStreaming = true,则为 supportedDownloadSettings = url。如果值为 usesStreaming = false,则为 supportedDownloadSettings = push 布尔值
usesOAuth 一个布尔值,用于确定相应操作是否为 OAuth 操作。此值将决定是否会向操作发送一次性链接,以便能够为相应操作的特定用户设置 state 布尔值
usesStreaming 一个布尔值,用于确定操作是否支持流式查询结果。查看集成服务列表中的是否使用数据流式传输(是/否)列。如果操作会流式传输结果,可能需要配置本地操作中心服务器 - 如需了解详情,请参阅为使用 OAuth 或流式传输的操作设置本地操作中心最佳实践页面。 布尔值
minimumSupportedVersion 操作将显示在管理面板“操作中心”列表中的最低 Looker 版本。 字符串

如需参考 Looker Action Hub 操作的示例,请访问 GitHub

支持的操作类型

Looker 支持三种类型的操作,如操作的 supportedActionTypes 参数中所指定:查询、单元格和信息中心。

  • 查询级操作:指发送整个查询的操作。例如,细分操作就是一种查询级操作。
  • 单元格级操作:单元格级操作会发送数据表中单个特定单元格的值。此操作类型不同于数据操作,后者可以使用 action 参数为维度或度量定义。如需发送表格中特定单元格的信息,Looker 会使用标记将操作映射到相应单元格。操作需要在 requiredFields 中指定其支持的标记。如需映射操作和字段,LookML 中的字段需要使用 LookML tags 参数指定它们映射到的标记。 例如,Twilio Message 操作使用 phone 标记,以便 LookML 开发者可以控制 Twilio 操作将显示在哪些手机号码字段中。
  • 信息中心级操作:信息中心级操作支持发送信息中心的图片。 例如,SendGrid 操作通过电子邮件发送信息中心图片。

向自定义操作添加用户属性

对于自定义操作,您可以在操作文件的 params 参数中添加用户属性。如果该参数是必需参数,那么除了 send_to_integration 权限之外,每个用户还必须在其用户账号或其所属的用户群组中为该属性定义一个值,才能在发送或安排内容时看到相应操作作为目标选项。

如需向操作添加用户属性,请执行以下操作:

  1. 如果不存在与 user_attribute_param 对应的用户属性,Looker 管理员可能需要创建该用户属性
  2. 为需要向操作目的地投放内容的用户或用户群组定义有效的用户属性值。(这些用户还必须拥有 send_to_integration 权限。)
  3. params 参数表示 Looker 管理员必须在管理面板的操作列表中,在操作的启用页面上配置的表单字段。在操作文件的 params 参数中,添加以下内容:
  params = [{
    description: "A description of the param.",
    label: "A label for the param.",
    name: "action_param_name",
    user_attribute_name: "user_attribute_name",
    required: true,
    sensitive: true,
  }]

其中,user_attribute_name 是在管理面板的用户部分的用户属性页面上的名称字段中定义的用户属性,required: true 表示用户必须为相应用户属性定义非 null 的有效值,才能在传送数据时看到相应操作,而 sensitive: true 表示用户属性已加密,一旦输入,便永远不会在 Looker 界面中显示。您可以指定多个用户属性子形参。

  1. 将更新部署到操作中心服务器。
    • 如果您要添加新操作,Looker 管理员需要在管理面板的操作页面上点击相应操作旁边的启用按钮来启用该操作。
    • 如果您要更新现有操作,请点击刷新按钮刷新操作列表。接下来,点击设置按钮。
  2. 在操作设置/启用页面上,Looker 管理员必须配置操作的表单字段,以通过以下方式从用户属性中提取信息:点击相应字段右侧的用户属性图标 ,然后选择所需的用户属性。

单元格级操作中的 requiredField 参数

对于单元格级操作,您可以配置模型的 LookML 字段,通过在操作文件的 requiredFields 参数中指定操作支持的标记,将数据传递到相应操作的目标位置。

参数 必需 说明 数据类型
tag 如果存在,则匹配具有此标记的字段。 字符串
any_tag 如果存在,则取代 tag,并与具有任何所提供标记的字段匹配。 字符串
all_tags 如果存在,则取代 tag 并匹配具有所有提供的标记的字段。 字符串

支持的数据格式

DataActionRequest 类定义了操作可使用的数据传送格式。对于查询级操作,请求将包含附件,附件可采用多种格式。该操作可以指定一个或多个 supportedFormats,也可以通过指定所有可能的格式来让用户选择格式。对于单元格级操作,单元格的值将显示在 DataActionRequest 上。

为 OAuth 配置操作

您可以配置操作,以便用户可以使用 OAuth 对操作进行身份验证。尽管 Looker Action Hub 必须保持无状态,但您可以通过 Looker Action API 中的表单请求强制执行状态。

Looker 操作 OAuth 流程

对于 Looker Action Hub 中的操作,您可以扩展 OAuthAction 而不是 Hub.Action,以设置一个布尔值,用于指示需要哪些 OAuth 方法才能对用户进行身份验证,以便用户执行操作。对于每个启用 OAuth 或启用状态的操作,Looker 都会存储每个用户、每个操作的状态,以便每个操作和用户组合都具有独立的 OAuth 事件。

创建操作的流程通常涉及 /form 请求,然后是 /execute 请求。对于 OAuth,/form 请求应包含一种方法,用于确定用户是否已在目标服务中通过身份验证。如果用户已通过身份验证,则操作应根据 /execute 请求的要求返回正常的 /form。如果用户未通过身份验证,该操作会返回一个用于初始化 OAuth 流程的链接。

使用 OAuth 网址保存状态

Looker 会向 ActionList 端点发送一个正文为空的 HTTP POST 请求。如果操作在其定义中返回 uses_oauth: true,则 Looker 会在每个 /form 请求中向该操作发送一次性使用的 state_urlstate_url 是一种特殊的一次性网址,用于为指定操作设置用户状态。

如果用户未通过端点的身份验证,则返回的 /form 应包含类型为 oauth_linkform_field,该 form_field 会转到操作的 /oauth 端点。state_url 应加密并保存为返回的 oauth_url 中的 state 参数。例如:

{
        "name": "login",
        "type": "oauth_link",
        "label": "Log in",
        "description": "OAuth Link",
        "oauth_url": "ACTIONHUB_URL/actions/my_action/oauth?state=encrypted_state_url"
}

在此示例中,/oauth 端点会将用户重定向到身份验证服务器。/oauth 端点在 OAuth 操作的 oauthUrl(...) 方法中构建重定向,如 Dropbox OauthUrl 中所示。

包含该加密 state_urlstate 参数应传递给 Looker Action Hub。

使用操作中心重定向 URI 保存状态

/oauth 端点中,还会为操作中心创建一个 redirect_uri,并将其传递给操作的 oauthUrl(...) 方法。此 redirect_uri 的形式为 /actions/src/actions/my_maction/oauth_redirect,是身份验证返回结果时使用的端点。

此端点将调用 oauthFetchInfo(...) 方法,该方法应由 OauthAction 方法实现,以提取必要的信息并尝试接收或保存从身份验证服务器收到的任何状态或 auth

state 对加密的 state_url 进行解密,并使用解密后的 state_urlstate 回传给 Looker。下次用户向该操作发出请求时,系统会将新保存的状态发送到 Looker Action Hub。

将操作文件添加到 Looker Action Hub 代码库

编写操作文件后,在 Looker Action Hub 代码库中执行以下操作:

  1. 将操作文件(例如 my_action.ts)添加到 actions/src/actions/index.ts

    import "./my_action/my_action.ts"
    
  2. 添加您在编写操作时使用的任何 Node.js 软件包要求。例如:

    yarn add aws-sdk
    yarn add express
    
  3. 安装 Looker Action Hub 服务器的 Node.js 依赖项。

    yarn install
    
  4. 运行您编写的任何测试。

yarn test

测试操作

如需进行完整测试,您可以托管专用操作中心服务器,以便针对 Looker 实例测试操作。此服务器需要位于公共互联网上,并具有有效的 SSL 证书,并且必须能够与 Looker 建立连接或收发 HTTPS 请求。为此,您可以使用基于云的平台(例如 Heroku),如以下示例所示。或者,您也可以使用满足上述要求的任何平台。

设置本地操作中心服务器

在此示例中,我们将采用在 looker-open-source/actions/src/actions GitHub 代码库中开发的操作,并将代码提交到新的 Git 分支。建议您使用分支来开发功能,以便轻松跟踪代码,并根据需要轻松地使用 Looker 创建 PR。

  1. 首先,创建分支,然后暂存并提交您的工作。例如:

    git checkout -b my-branch-name
    git add file-names
    git commit -m commit-message
    
  2. 在此示例中,如需将分支推送到 Heroku,请在命令行中将 Git 代码库配置为以 Heroku 作为远程选项:

    heroku login
    heroku create
    git push heroku
    
  3. Heroku 将返回当前托管操作中心的公开网址,供您使用。访问相应网址或运行 heroku logs,以确认操作中心正在运行。如果您忘记了公开网址,可以在命令行中运行以下命令:

    heroku info -s | grep web_url
    

    Heroku 将返回您的公开网址。例如:https://my-heroku-action-server-1234.herokuapp.com

  4. 在命令行中,设置操作中心基础网址:

    heroku config:set ACTION_HUB_BASE_URL="https://my-heroku-action-server-1234.herokuapp.com"
    
  5. 设置操作中心标签:

    heroku config:set ACTION_HUB_LABEL="Your Action Hub"
    
  6. Looker 使用授权令牌连接到 Action Hub。在命令行中生成令牌:

    heroku run yarn generate-api-key
    

    如果您未使用 Heroku(如本示例所示),请改用:

    yarn generate-api-key
    

    Heroku 将返回您的授权令牌。例如:Authorization: Token token="abcdefg123456789"

  7. 使用密钥设置操作中心 Secret:

    heroku config:set ACTION_HUB_SECRET="abcdefg123456789"
    

    客户自托管部署可能需要配置此处未记录的其他环境变量。

  8. 如需在本地 Looker 实例中添加操作,请依次前往管理 > 操作

    • 在操作列表底部,点击添加 Action Hub
    • 输入 Action Hub 网址和(可选)密钥
    • 在 Looker 的管理菜单中,找到操作列表中的相应操作。
    • 点击启用

如果您的操作需要从 Looker 传递特定类型的数据,请务必配置所有模型,以包含相应的 tags 参数。

现在,您可以测试操作了!

测试信息中心级和查询级操作

在 Looker 实例中,根据需要配置带有标记的 LookML 模型。创建并保存 Look。在已保存的 Look 中,点击右上角菜单,然后选择发送,并将您的操作作为目的地。如果您有要交付的表单,Looker 会在已发送窗口中呈现该表单。

点击发送测试以传送数据。相应操作的状态将显示在管理面板的调度程序历史记录中。如果您的操作遇到错误,该错误将显示在管理面板中,并且 Looker 会向发送操作的用户发送一封包含错误消息的电子邮件。

测试单元格级操作

设置具有适当标记的 LookML 字段以用于您的操作。在 Looker 实例中,运行包含该字段的查询。在数据表中找到相应字段。点击单元格中的 ,然后从下拉菜单中选择发送。如果您收到错误消息,则需要在解决这些错误后对数据表进行完全刷新。

发布和启用自定义操作

自定义操作有两种发布选项:

发布操作后,您可以在管理面板的 Actions(操作)页面中启用该操作

发布到 Looker Action Hub

这种方法最简单,适用于您希望向所有 Looker 用户提供的任何操作。

测试完操作后,您可以向 GitHub 中的 looker-open-source/actions 代码库提交 PR。

  1. 输入以下命令:

    git push <your fork> <your development branch>
    
  2. looker-open-source/actions 代码库为目标创建拉取请求。

  3. 填写 Looker Marketplace 和 Action Hub 提交表单。如需详细了解表单要求,请参阅向 Looker Marketplace 提交内容

    Looker 将审核您的操作代码。我们保留拒绝您的 PR 的权利,但可以帮助您解决遇到的任何问题,并提供改进建议。然后,我们将代码合并到 looker-open-source/actions 代码库并将其部署到 actions.looker.com。代码部署完毕后,所有 Looker 客户都可以使用。

  4. 在 Looker 实例中启用操作,以便该操作显示为数据传送选项。

发布到专用操作中心服务器

如果您有仅供贵公司或特定使用情形使用的自定义操作,则不应将相应操作添加到 looker-open-source/actions 代码库。请使用您用于测试操作的同一 Node.js 框架创建专用操作中心。

您可以在自己的基础架构上或使用基于云的应用平台(我们的示例使用的是 Heroku)设置内部操作中心服务器。在部署之前,请务必将 Looker Action Hub 分叉到您的私有 Action Hub 服务器。

配置 LookML 模型以用于操作

对于自定义操作和 Looker Action Hub 中提供的操作,您都必须在 LookML 模型中使用 tags 参数来标识相关的数据字段。管理面板中的操作页面会提供有关服务所需标记的信息(如果有)。

例如,Twilio Send Message 集成功能可向手机号码列表发送消息。在管理面板的操作页面上,集成会显示子文字“操作可用于具有标记为 phone 的字段的查询”。

这意味着 Twilio Send Message 服务需要一个包含手机号码字段的查询,并使用 tags 参数来标识查询中包含手机号码的字段。您可以通过为 LookML 中的手机号码字段指定 tags: ["phone"] 来标识该字段。手机号码字段的 LookML 可能如下所示:

dimension: phone {
  tags: ["phone"]
  type: string
  sql: ${TABLE}.phone ;;
}

不需要代码的集成会在管理面板的操作页面上显示“操作可用于任何查询”这一副文字。

请务必使用 tags 参数在 LookML 模型中标识所有必需字段,以便用户可以使用该服务发送数据。

后续步骤

了解如何将 Look 或探索信息中心的内容传递给集成服务。