通过 Action Hub 共享数据

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

本页将向您介绍构建自定义操作的选项,您可以请求将其添加到 Looker Action Hub 添加到您自己的专用 Action Hub 服务器。本页还介绍了如何启动本地 Action Hub 服务器以测试自定义 Action 或运行专用 Action Hub 服务器。

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

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

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

Looker Action Hub

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

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

Looker Action Hub 要求

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

如果您的 Looker 部署无法处理这些请求,或者您的 Looker 实例上启用了IP 许可名单功能,不妨考虑设置本地 Action Hub 服务器来处理专用 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 实例的请求

对于支持流式传输结果或使用 OAuth 的操作,Looker Action Hub 必须向 Looker 实例发出请求。

借助流式传输 action,该 action 可以使用返回所有结果的查询。启用了 OAuth 的操作会通过 OAuth 2.0 流程使用按用户身份验证。OAuth 操作必须在其来源 Looker 实例中存储用户凭据,因为 Looker Action Hub 是无状态的多租户平台,不会存储任何类型的特定于用户的凭据。

从 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 Action Hub 需要能够将 <host_looker_url> 解析为 IP 地址,向 Looker 实例所在的网络发出请求。

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

客户托管实例的注意事项

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

为解决 Looker Action Hub 无法与 Looker 实例通信的潜在问题,Looker 管理员可以实现本页面下文中显示的解决方案之一。合适的解决方案或解决方案组合取决于 Looker 实例的架构:

  • 如果客户托管的实例无法由 Looker Action Hub 解析(即 Looker Action Hub 无法接收来自 Looker 实例的请求),Looker 管理员可以与 Google Cloud 销售专家联系,以启用 public_host_url 许可功能。该许可功能会显示 --public-host-url 启动选项,让管理员可以指定与实例 <host_looker_url> 不同的可解析 <public_host_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 的操作部署客户托管的 Action Hub

  • 如需部署客户托管的 Action Hub,您必须确保 JAR 文件托管在公共服务器上,以便 Looker Action Hub 能够与其通信。不过,我们不建议您这样做。

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

构建自定义操作

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

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

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

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

设置开发代码库

Looker Action Hub 是一个使用 TypeScript 编写的 Node.js 服务器,TypeScript 是现代 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 目录中创建一个与您的 Action 同名的目录。例如:

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

Looker 建议您还添加以下内容:

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

编写操作

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

操作文件的确切内容因服务、操作的类型或级别以及需要指定的数据或可视化格式而异。您还可以为该 Action 配置 OAuth 2.0 授权流程

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

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

参数 必填 说明 数据类型
name 操作的唯一名称。此 ID 在 Looker 操作中心的所有操作中都应是唯一的。 字符串
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 一个布尔值,用于确定相应 Action 是否支持流式传输查询结果。查看集成服务列表中的使用数据流式传输(是/否)列。流式传输结果的 Action 可能需要配置本地 Action 中心服务器。如需了解详情,请参阅为使用 OAuth 或流式传输的 Action 设置本地 Action 中心最佳实践页面。 布尔值
minimumSupportedVersion 操作将显示在管理面板“操作中心”列表中的最低 Looker 版本。 字符串

您可以参阅 GitHub 上的 Looker Action Hub 操作示例。

支持的操作类型

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

  • 查询级操作:此操作用于发送整个查询。例如,“细分受众群操作”就是查询级操作。
  • 单元格级操作:单元格级操作会发送数据表中单个特定单元格的值。此操作类型不同于数据操作,您可以使用 action 参数为维度或测量定义数据操作。如需发送表格中特定单元格中的信息,Looker 会使用标记将操作映射到相应的单元格。Action 需要在 requiredFields 中指定其支持的标记。如需映射操作和字段,LookML 中的字段需要使用 LookML tags 参数指定它们映射到的代码。例如,Twilio 消息操作使用 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. 将更新部署到 Action Hub 服务器。
    • 如果您要添加新操作,Looker 管理员需要在管理面板的操作页面上点击相应操作旁边的启用按钮,以启用该操作。
    • 如果您要更新现有操作,请点击刷新按钮刷新操作列表。接下来,点击设置按钮。
  2. 在操作设置/启用页面上,Looker 管理员必须配置操作的表单字段,以便从用户属性中提取信息,具体方法是点击相应字段右侧的用户属性图标 ,然后选择所需的用户属性。

单元格级操作中的 requiredField 参数

对于单元格级操作,您可以在操作文件的 requiredFields 参数中指定操作支持哪些标记,以配置模型的 LookML 字段,将数据传送到该操作目的地。

参数 必填 说明 数据类型
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 应进行加密,并作为 state 参数保存在返回的 oauth_url 中。例如:

{
        "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。

使用 Action Hub 重定向 URI 保存状态

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

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

state 会解密加密的 state_url,并使用它将 state POST 回 Looker。当用户下次请求执行该操作时,系统会将新保存的状态发送到 Looker Action Hub。

将您的 Action 文件添加到 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

测试操作

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

设置本地 Action Hub 服务器

在此示例中,我们将执行在 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,请在命令行中将 Heroku 配置为远程选项,以便在 Git 代码库中使用:

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

    heroku info -s | grep web_url
    

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

  4. 在命令行中,设置您的 Action Hub 基本网址:

    heroku config:set ACTION_HUB_BASE_URL="https://my-heroku-action-server-1234.herokuapp.com"
    
  5. 设置您的 Action Hub 标签:

    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. 使用密钥设置您的 Action 中心 Secret:

    heroku config:set ACTION_HUB_SECRET="abcdefg123456789"
    

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

  8. 在本地 Looker 实例中,依次选择管理 > 操作,然后添加操作。

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

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

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

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

在 Looker 实例中,根据需要使用代码配置 LookML 模型。创建并保存外观。在已保存的“外观”中,点击右上角的菜单,然后选择发送,并将操作作为目标。如果您有要提交的表单,Looker 会在已发送窗口中呈现该表单。

点击发送测试数据以提交数据。相应操作的状态将显示在管理面板中的时间表历史记录中。如果您的操作遇到错误,系统会在管理面板中显示错误消息,并向发送操作的用户发送包含错误消息的电子邮件。

测试单元格级操作

为您的操作设置 LookML 字段,并添加适当的代码。在 Looker 实例中,运行包含该字段的查询。在数据表格中找到该字段。点击单元格中的 ,然后从下拉菜单中选择发送。如果您收到错误消息,则需要在解决这些错误后对数据表进行完整刷新。

发布和启用自定义操作

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

发布 Action 后,您可以从管理面板中的 Action 页面启用它

发布到 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 会审核您的操作代码。我们保留拒绝您的公共关系信息的权利,但可以帮助您解决任何问题,并提供改进建议。然后,我们将代码合并到 looker-open-source/actions 代码库,并将其部署到 actions.looker.com。代码部署后,将面向所有 Looker 客户提供。

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

发布到专用 Action Hub 服务器

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

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

配置 LookML 模型以与操作搭配使用

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

例如,Twilio 发送消息集成会向电话号码列表发送消息。在管理面板的操作页面上,集成会显示子文本“操作可用于标记了 phone 字段的查询”。

这意味着,Twilio 发送消息服务需要查询包含电话号码字段,并使用 tags 参数来确定查询中哪个字段包含电话号码。您可以在 LookML 中通过为电话号码字段指定 tags: ["phone"] 来识别该字段。电话号码字段的 LookML 可能如下所示:

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

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

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

后续步骤

了解如何将数据分析或探索信息中心的内容提交到集成服务。