- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想使用 Google Cloud Function 将数据从 GCS 中的 CSV 文件快速传输到 Cloud SQL 中的 Postgres 表。
理想情况下我会使用 GCP SDK 来执行此操作,但官方 documentation建议执行导入的唯一方法是 1)控制台、2)gcloud 命令或 3)curl。我在 Python 中使用 requests
采用了curl 方法。我在下面编写的代码(我省略了 Cloud Function 请求包装器)可以在我的笔记本电脑上运行,但不能在 Cloud Function 中运行。云函数完成时没有确认错误,但我的数据从未加载到表中,这与我从笔记本电脑运行代码时不同。
import google.auth.transport.requests
import json
import requests
credentials, project = google.auth.default()
"""
According to the docs, hitting the REST endpoint requires an
access token to be passed in the request header. It was not
clear how to obtain an access token without resorting to
gcloud commands, but I finally stumbled across a solution
here: https://stackoverflow.com/a/55804230/554481
At this point in the code credentials.valid is False, and
credentials.token is None, so I need to perform a refresh
to populate them.
"""
auth_req = google.auth.transport.requests.Request()
credentials.refresh(auth_req)
# Now you can use credentials.token
access_token = credentials.token
# Removed business details for SO post
instance_name = '<removed>'
bucket_name = '<removed>'
project_id = '<removed>'
gcs_path = '<removed>'
database = '<removed>'
table_name = '<removed>''
headers = {
'Content-Type':'application/json',
'Authorization':'Bearer '+str(access_token)
}
endpoint = 'https://www.googleapis.com/sql/v1beta4/projects/{project_id}/instances/{instance_name}/import'.format(
project_id=project_id,
instance_name=instance_name
)
gcs_location = 'gs://{bucket_name}/{gcs_path}'.format(
bucket_name=bucket_name,
gcs_path=gcs_path
)
json_payload = {
"importContext": {
"fileType": "CSV",
"uri": gcs_location,
"database": database,
"csvImportOptions":{
"table":table_name
}
}
}
requests.post(
url=endpoint,
data=json.dumps(json_payload),
headers=headers
)
最佳答案
由于您没有检查响应,post 请求可能已成功执行,但仍返回错误代码。如果您看一下 Instance: import文档中,有一个使用发现客户端发出请求的示例:
from googleapiclient import discovery
from oauth2client.client import GoogleCredentials
credentials = GoogleCredentials.get_application_default()
service = discovery.build('sqladmin', 'v1beta4', credentials=credentials)
# Project ID of the project that contains the instance.
project = 'my-project' # TODO: Update placeholder value.
# Cloud SQL instance ID. This does not include the project ID.
instance = 'my-instance' # TODO: Update placeholder value.
instances_import_request_body = {
# TODO: Add desired entries to the request body.
}
request = service.instances().import_(project=project, instance=instance, body=instances_import_request_body)
response = request.execute()
# TODO: Change code below to process the `response` dict:
pprint(response)
响应结果将显示操作是否成功。
关于python - 从 Cloud Function 将 GCS CSV 导入 Cloud SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57843016/
GCS Transfer Service是定期传输数据的一个很好的解决方案。将一个存储桶同步到另一个存储桶(目标存储桶具有存档存储类)的适当设置是什么? 我担心的一个问题是,如果服务正在检查相同的对象
我正在尝试使用 Envoy 代理将请求路由到 GCS。我能够通过代理路由实际的存储请求。但是当我在 GCS 连接器设置中设置此 fs.gs.proxy.address 参数时,OAuth token
这个问题在这里已经有了答案: Is it necessary to recreate a Google Container Engine cluster to modify API permissi
GCS = 谷歌云存储 GAE = 谷歌应用引擎 如果给定目录(模拟目录,因为不存在真实目录)中有大量文件,我该如何管理: 在我的 GAE Python 代码中列出用于某些处理的所有文件? 按文件名降
GCS 文件 API 已于 2015 年 7 月 28 日关闭。在我的开发服务器中,我收到以下警告: The Google Cloud Storage Java API is deprecated a
我想将 400MB 的文件上传到 Google Cloud Storage。以下是我用来获取上传网址并在 angularjs 中发布的代码片段 Java Servlet: UploadOptions
一个简单的 Python 代码,用于列出 Google Cloud Storage 中特定文件夹中的对象: from apiclient import discovery import apiclie
管理Terraform状态文件的最佳方式是通过云端的统一的存储,如谷歌云就用GCS。 首先要创建一个Bucket:
我目前正在尝试编写一些代码以将 Google 存储桶中的一些“区域”对象转换为“冷线”,但出现以下异常: {The service storage has thrown an exception: G
我需要从 GCS 存储桶中的文件夹中删除数百万个对象。 这是我目前的实现。 bucket = self.storage_client.bucket(bucket_name) blobs = bucke
我已经安装了 hadoop 3 版本的 GCS 连接器,并将以下配置添加到 core-site.xml,如 Install.md 中所述.目的是将数据从本地集群中的 hdfs 迁移到云存储。 核心站点
我正在尝试使用 Java 存储客户端从远程服务器读取文件行数。 还尝试了 gsutil cat gs://{bucket_name}/file.txt | wc -l < 还有其他办法吗? 最佳答
我从开始 client = storage.Client() bucket = client.get_bucket(BUCKET_NAME) 我知道如何: 列出 bucket
如果有任何文件上传到 Google 云存储,我们将通过 Google 云功能自动处理文件。我们使用 python 编写了代码。 https://cloud.google.com/functions/d
关注谷歌的 Getting Started我使用以下代码获取远程目录中所有文件的列表 class GCSFileStorage { String bucket = "bucket_name";
我想获取存储在 Google Cloud Storage 中的文件的文件元数据。实际上,我们需要文件的媒体链接,以便可以下载文件或将 URL 添加到下载页面。 Blob blob = storage.
我使用 scala 开发应用程序,通过 hdfs 上的服务帐户凭据从 GCS 下载加密文件(使用客户提供的加密 key 的加密文件) val path = new Path(keyfile) val
当我通过 Console 从 bucket 中的“文件夹”中删除所有文件时,该文件夹也消失了,因为没有目录这样的东西 - 整个bucket 之后的路径是关键。 但是,当我通过 REST API 以编程
我现在觉得有点傻。我一直在阅读大量文档和 stackoverflow 问题,但我无法正确理解。 我在 Google Cloud Storage 上有一个文件。它在桶“test_bucket”中。在这个
我正在使用在 Google 计算引擎上运行的 node.js 应用程序为每个用户创建 GCS 存储桶。存储桶创建是每个用户的一次性事件。但是当我尝试运行该程序为 20 个用户并行创建唯一的存储桶时,出
我是一名优秀的程序员,十分优秀!