Looker Studio 拥有自己的报告缓存系统。创建连接器时,您可以实现自定义缓存,以加快报告生成速度并避免 APR 速率限制。
例如,假设您创建了一个连接器,它会针对特定的邮政编码提供过去 7 天的历史天气数据。您的连接器变得很受欢迎,但是您用于从中提取数据的外部 API 具有严格的速率限制。该 API 每天仅更新一次数据,因此对于特定的邮政编码,无需在一天内多次提取相同的数据。使用该解决方案指南,您可以针对每个邮政编码实现每日缓存。
要求
- 一个 Firebase 实时数据库。如果您无权访问任何实时数据库,请创建一个 Google Cloud Platform (GCP) 项目,并按照入门指南创建自己的 Firebase Realtime Database 实例。
- 一个用于从 Firebase 实时数据库读取和向其中写入数据的 GCP 服务账号。
- 一个可从来源中提取数据的社区连接器。
限制
- 该解决方案无法与 Looker 数据洞察高级服务结合使用。当您使用 Looker Studio 高级服务时,您在 Apps 脚本中的连接器代码无权访问数据。因此,您无法使用 Apps 脚本来缓存数据。
- 报告编辑者和查看者无法重置该特定缓存。
解决方案
实现服务账号
- 在 Google Cloud 项目中创建一个服务账号。
- 确保此服务账号在 Cloud 项目中具有 BigQuery 访问权限。
- 必需的身份和访问权限管理 (IAM) 角色:
Firebase Admin
- 必需的身份和访问权限管理 (IAM) 角色:
- 下载 JSON 文件以获取服务账号密钥。将文件的内容存储在连接器项目的脚本属性中。添加密钥后,脚本属性应类似于 Apps 脚本界面中的以下内容:
- 在 Apps 脚本项目中添加适用于 Apps 脚本的 OAuth2 库。
- 为服务账号实现必需的 OAuth2 代码:
实现代码以便从 Firebase 中读取和向其中写入数据
您将使用 Firebase Database REST API 对 Firebase 实时数据库执行读写操作。以下代码实现了访问该 API 所需的方法。
实现 getData()
无缓存的现有 getData()
代码的结构应大致如下所示:
要在您的 getData()
代码中使用缓存,请按以下步骤操作:
- 确定应缓存数据的“区块”或“单元”。
创建一个唯一键,以便将最小的数据单元存储在缓存中。
对于示例实现,configparams
中的zipcode
被用作键。
可选:对于每位用户缓存,创建一个包含基本键和用户身份的复合键。实现示例:
js var baseKey = getBaseKey(request); var userEmail = Session.getEffectiveUser().getEmail(); var hasheduserEmail = getHashedValue(userEmail); var compositeKey = baseKey + hasheduserEmail;
如果缓存数据存在,则检查缓存是否是最新的。
在该示例中,特定邮政编码的缓存数据会与当前日期一同保存。当从缓存中检索数据时,将根据当前日期检查缓存的日期。var cacheForZipcode = { data: <data being cached>, ymd: <current date in YYYYMMDD format> }
如果缓存数据不存在或不是最新的,则从来源提取数据并将其存储在缓存中。
在以下示例中,main.js
包含实现了缓存的 getData()
代码。
示例代码
其他资源
Chrome 用户体验连接器为数千名用户打造了一个基于约 20 GB 的 BigQuery 表格的信息中心。此连接器将 Firebase Realtime Database 与 Apps 脚本缓存服务结合使用,提供了一种双层缓存方法。如需了解实现详情,请参阅代码。