如何用Presto在Google BigQuery上运行SQL查询

475 阅读4分钟

Presto已经发展成为云数据湖之上的一个统一的SQL引擎,既可用于交互式查询,也可用于多个数据源的批量工作负载。本教程将告诉你如何使用Presto(与Kubernetes一起运行)在Google BigQuery上运行SQL查询。

Presto的BigQuery连接器允许查询存储在BigQuery中的数据。这可用于连接不同系统之间的数据,如BigQuery和Hive。该连接器使用BigQuery存储API来读取表格中的数据。

步骤1:用Kubernetes建立一个Presto集群

使用这些说明在Kubernetes上建立你自己的Presto集群,或者你可以使用Ahana对Presto的管理服务

第2步:用谷歌云平台建立一个谷歌BigQuery项目

从Google Cloud Console创建一个Google BigQuery项目,并确保它与这里描述的数据集和表格一起启动和运行。

下面的屏幕显示了带有 "航班 "表的Google BigQuery项目。

第3步:设置一个密钥并下载谷歌BigQuery证书JSON文件

为了验证BigQuery连接器访问BigQuery表,创建一个证书密钥并下载JSON格式的文件。

使用服务帐户JSON 密钥和GOOGLE_APPLICATION_CREDENTIALS ,如这里所述。

凭证文件的样本应该是这样的

JSON

{

  "type": "service_account",

  "project_id": "poised-journey-315406",

  "private_key_id": "5e66dd1787bb1werwerd5ddf9a75908b7dfaf84c",

  "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwgKozSEK84b\ntNDXrwaTGbP8ZEddTSzMZQxcX7j3t4LQK98OO53i8Qgk/fEy2qaFuU2yM8NVxdSr\n/qRpsTL/TtDi8pTER0fPzdgYnbfXeR1Ybkft7+SgEiE95jzJCD/1+We1ew++JzAf\nZBNvwr4J35t15KjQHQSa5P1daG/JufsxytY82fW02JjTa/dtrTMULAFOSK2OVoyg\nZ4feVdxA2TdM9E36Er3fGZBQHc1rzAys4MEGjrNMfyJuHobmAsx9F/N5s4Cs5Q/1\neR7KWhac6BzegPtTw2dF9bpccuZRXl/mKie8EUcFD1xbXjum3NqMp4Gf7wxYgwkx\n0P+90aE7AgMBAAECggEAImgvy5tm9JYdmNVzbMYacOGWwjILAl1K88n02s/x09j6\nktHJygUeGmp2hnY6e11leuhiVcQ3XpesCwcQNjrbRpf1ajUOTFwSb7vfj7nrDZvl\n4jfVl1b6+yMQxAFw4MtDLD6l6ljKSQwhgCjY/Gc8yQY2qSd+Pu08zRc64x+IhQMn\nne1x0DZ2I8JNIoVqfgZd0LBZ6OTAuyQwLQtD3KqtX9IdddXVfGR6/vIvdT4Jo3en\nBVHLENq5b8Ex7YxnT49NEXfVPwlCZpAKUwlYBr0lvP2WsZakNCKnwMgtUKooIaoC\nSBxXrkmwQoLA0DuLO2B7Bhqkv/7zxeJnkFtKVWyckQKBgQC4GBIlbe0IVpquP/7a\njvnZUmEuvevvqs92KNSzCjrO5wxEgK5Tqx2koYBHhlTPvu7tkA9yBVyj1iuG+joe\n5WOKc0A7dWlPxLUxQ6DsYzNW0GTWHLzW0/YWaTY+GWzyoZIhVgL0OjRLbn5T7UNR\n25opELheTHvC/uSkwA6zM92zywKBgQC3PWZTY6q7caNeMg83nIr59+oYNKnhVnFa\nlzT9Yrl9tOI1qWAKW1/kFucIL2/sAfNtQ1td+EKb7YRby4WbowY3kALlqyqkR6Gt\nr2dPIc1wfL/l+L76IP0fJO4g8SIy+C3Ig2m5IktZIQMU780s0LAQ6Vzc7jEV1LSb\nxPXRWVd6UQKBgQCqrlaUsVhktLbw+5B0Xr8zSHel+Jw5NyrmKHEcFk3z6q+rC4uV\nMz9mlf3zUo5rlmC7jSdk1afQlw8ANBuS7abehIB3ICKlvIEpzcPzpv3AbbIv+bDz\nlM3CdYW/CZ/DTR3JHo/ak+RMU4N4mLAjwvEpRcFKXKsaXWzres2mRF43BQKBgQCY\nEf+60usdVqjjAp54Y5U+8E05u3MEzI2URgq3Ati4B4b4S9GlpsGE9LDVrTCwZ8oS\n8qR/7wmwiEShPd1rFbeSIxUUb6Ia5ku6behJ1t69LPrBK1erE/edgjOR6SydqjOs\nxcrW1yw7EteQ55aaS7LixhjITXE1Eeq1n5b2H7QmkQKBgBaZuraIt/yGxduCovpD\nevXZpe0M2yyc1hvv/sEHh0nUm5vScvV6u+oiuRnACaAySboIN3wcvDCIJhFkL3Wy\nbCsOWDtqaaH3XOquMJtmrpHkXYwo2HsuM3+g2gAeKECM5knzt4/I2AX7odH/e1dS\n0jlJKzpFpvpt4vh2aSLOxxmv\n-----END PRIVATE KEY-----\n",

  "client_email": "bigquery@poised-journey-678678.iam.gserviceaccount.com",

  "client_id": "11488612345677453667",

  "auth_uri": "https://accounts.google.com/o/oauth2/auth",

  "token_uri": "https://oauth2.googleapis.com/token",

  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",

  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x505/bigquery%40poised-journey-315406.iam.gserviceaccount.com"

}

专业提示:在你进入下一步之前,请尝试使用你下载的凭证JSON文件与其他第三方sql工具,如DBeaver访问你的BigQuery表。这是为了确保你的凭证具有有效的访问权限,或隔离你的凭证的任何问题

第4步:配置谷歌BigQuery连接器的Presto目录

为了配置BigQuery连接器,你需要在etc/catalog 中创建一个目录属性文件,例如,bigquery.properties ,将BigQuery连接器安装为bigquery目录。你可以用以下内容创建文件,根据你的设置,替换连接属性。这应该通过编辑configmap完成,以确保它反映在部署中。

kubectl edit configmap presto-catalog -n <cluster_name> -o yaml

以下是需要添加的目录属性。

connector.name=bigquery
bigquery.project-id=<your Google Cloud Platform project id>
bigquery.credentials-file=patch/for/bigquery-credentials.json

以下是目录yaml文件的样本条目。

bigquery.properties: |
connector.name=bigquery
bigquery.project-id=poised-journey-317806
bigquery.credentials-file=/opt/presto-server/etc/bigquery-credential.json

第5步:用谷歌BigQuery凭证文件配置Presto协调员和工作者

要配置BigQuery连接器。

  1. 在presto协调器的configmap中加载bigquery-credential.json的凭证文件的内容。

kubectl edit configmap presto-coordinator-etc -n <cluster_name> -o yaml

  1. 在协调器的部署文件中为凭证文件添加一个新的volumeMounts会话。

kubectl edit deployment presto-coordinator -n <cluster_name>

按照样本配置,您可以在协调器的部署文件中的volumeMounts部分的末尾添加。

volumeMounts:
- mountPath:/opt/presto-server/etc/bigquery-credential.json
name: presto-coordinator-etc-vol
subPath: bigquery-credential.json

  1. 在presto worker的configmap中加载bigquery-credential.json的凭证文件的内容。

kubectl edit configmap presto-worker-etc -n <cluster_name> -o yaml

  1. 在工作者的部署文件中为凭证文件添加一个新的volumeMounts会话。

kubectl edit deployment presto-worker -n <cluster_name>

按照示例配置,您可以在worker的部署文件中,在volumeMounts部分的末尾添加。

volumeMounts:
- mountPath:/opt/presto-server/etc/bigquery-credential.json
name: presto-worker-etc-vol
subPath: bigquery-credential.json

第6步:用Apache Superset设置数据库连接

创建你自己的数据库连接URL,用下面的语法从Superset查询。

presto://<username>:<password>@bq.rohan1.dev.app:443/<catalog_name>

第7步:检查可用的数据集、模式和表等。

在与Superset的数据库连接成功后,运行以下查询,确保bigquery目录被选中,并执行show schemas和show tables以了解可用数据。

show catalogs;

show schemas from bigquery;

show tables from bigquery.rohan88;

第8步:从Apache Superset运行SQL查询以访问BigQuery表

一旦你访问你的数据库模式,你可以对表运行SQL查询,如下图所示。

select * from catalog.schema.table;

select * from bigquery.rohan88.flights LIMIT1;

你也可以从Presto Cli执行类似的查询,这里是另一个从Preso Cli对不同Bigquery数据集运行SQL查询的例子。

$./presto-cli.jar --server https://<presto.cluster.url>
--catalog bigquery --schema <schema_name> --user
<presto_username> --password

下面的例子显示了你如何将Google BigQuery表与S3的Hive表连接起来,并运行sql查询。

现在你应该能够使用Presto查询BigQuery了吧?