Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >使用Pythonforgcp2.0的OAuth BigQuery

使用Pythonforgcp2.0的OAuth BigQuery
EN

Stack Overflow用户
提问于 2019-11-22 06:03:19
回答 3查看 1.8K关注 0票数 0

我正在寻找一个代码片段,用于实现GCP2.0身份验证,使用oAuth连接到GCP查询服务。

我正在使用Google cloud shell来编写python代码。但是我收到的访问令牌是错误的请求。

代码语言:javascript
代码运行次数:0
复制
access_token = google.fetch_token(token_url=token_url,client_id=client_id,client_secret=client_secret,authorization_response=redirect_response).

此外,我需要自动化这个过程,所以手动粘贴的redirect_response需要避免。

EN

回答 3

Stack Overflow用户

发布于 2019-11-22 06:18:35

建议您使用BigQuery Python客户端库。Pip package google-cloud-bigquery提供了这一点。您还需要使用服务帐户json文件设置GOOGLE_APPLICATION_CREDENTIALS。

使用这个过程,你不需要处理令牌的生成和更新,因为这个过程是由后台的客户端库处理的。

详细说明请参考BigQuery Client Libraries Python小节。

票数 0
EN

Stack Overflow用户

发布于 2019-11-22 11:04:59

BigQuery Client Libraries中,记录了如何从GCP控制台和Command Line设置身份验证。

要使用BigQuery API library,您需要验证您的服务帐户。gcloud命令gcloud iam service-accounts keys create [FILE_NAME].json --iam-account [NAME]@[PROJECT_ID].iam.gserviceaccount.com生成一个JSON密钥文件,其中包含执行此操作所需的私有信息(如project_id、私钥等)。

在进行BigQuery应用程序接口调用时,您需要向应用程序代码提供这样的凭据。可通过将环境变量GOOGLE_APPLICATION_CREDENTIALS设置为指向服务帐户JSON文件的路径来完成此操作

代码语言:javascript
代码运行次数:0
复制
export GOOGLE_APPLICATION_CREDENTIALS="PATH/TO/SERVICE_ACCOUNT.json"

然而,这只在您当前的shell会话期间有效,所以如果这个shell会话过期或者您打开了一个新的shell会话,那么您将需要再次设置这个变量。验证凭据的另一种方法是使用

Python脚本中的google.oauth2.Credentials.from_service_account_file

在以下Python代码中,服务帐户使用方法google.oauth2.Credentials.from_service_account_file进行身份验证,从Google Cloud Storage中的CSV文件生成一个新的BigQuery表,并将新数据插入到该表中。

代码语言:javascript
代码运行次数:0
复制
from google.cloud import bigquery
from google.oauth2 import service_account

# Path to the service account credentials
key_path = "/PATH/TO/SERVICE-ACCOUNT.json"
credentials = service_account.Credentials.from_service_account_file(
    key_path,
    scopes=["https://www.googleapis.com/auth/cloud-platform"],
)

# Instantiation of the BigQuery client
bigquery_client = bigquery.Client()

GCS_URI    = "gs://MY_BUCKET/MY_CSV_FILE"
DATASET_ID = "MY_DATASET"
TABLE_ID   = "MY_TABLE"

def bq_insert_from_gcs(target_uri = GCS_URI, dataset_id = DATASET_ID, table_id = TABLE_ID):
    """This method inserts a CSV file stored in GCS into a BigQuery Table."""

    dataset_ref = bigquery_client.dataset(dataset_id)

    job_config = bigquery.LoadJobConfig()
    # Schema autodetection enabled
    job_config.autodetect = True
    # Skipping first row which correspnds to the field names
    job_config.skip_leading_rows = 1
    # Format of the data in GCS
    job_config.source_format = bigquery.SourceFormat.CSV
    load_job = bigquery_client.load_table_from_uri(target_uri,\
                                                   dataset_ref.table(table_id),\
                                                   job_config=job_config)\

    print('Starting job {}'.format(load_job.job_id))
    print('Loading file {} into the Bigquery table {}'.format(target_uri, table_id))

    load_job.result()
    return 'Job finished.\n'


def bq_insert_to_table(rows_to_insert, dataset_id = DATASET_ID, table_id= TABLE_ID):
    """This method inserts rows into a BigQuery table"""

    # Prepares a reference to the dataset and table
    dataset_ref = bigquery_client.dataset(dataset_id)
    table_ref = dataset_ref.table(table_id)
    # API request to get table call
    table = bigquery_client.get_table(table_ref)

    # API request to insert the rows_to_insert
    print("Inserting rows into BigQuery table {}".format(table_id))
    errors = bigquery_client.insert_rows(table, rows_to_insert)
    assert errors == []


bq_insert_from_gcs()

rows_to_insert = [( u'Alice', u'cat'),\
                  (u'John', u'dog')]
bq_insert_to_table(rows_to_insert)

此外,我强烈建议使用Python3实现您的脚本,因为从2020年1月1日起,google-cloud-bigquery将不再支持Python2。

票数 0
EN

Stack Overflow用户

发布于 2019-11-25 09:19:18

您需要导出到json的serviceaccount的凭据。GCP、->、IAM和Admin ->服务帐户,在这三个小圆点下,您将发现您的帐户的创建密钥。

正如在前面的答案中所提到的,您还需要BigQuery library

那么像这样的东西就可以工作了

代码语言:javascript
代码运行次数:0
复制
from google.cloud import bigquery
from google.oauth2 import service_account

def BigQuery():
  try:
    credentials = service_account.Credentials.from_service_account_file(
      '/Credentials.json')
    project_id = '[project_id]
    client = bigquery.Client(credentials= credentials,project=project_id)

    query = ('SELECT Column1, Column2 FROM `{}.{}.{}` limit 20'.format('[project_id]','[dataset]','[table]'))
    query_job = client.query(query)
    results = query_job.result()
    for row in results:
      print('Column1 1 : {}, Column 2: {}'.format(row.Column1, row.Column2))
  except:
    print('Error!')



if __name__ == '__main__':
  BigQuery()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58988362

复制
相关文章
python从日志文件中提取出现的ip
#coding:utf-8 ''' Created on 2015年4月13日 @author: Administrator ''' fp = open('rootaccess.07log','r') total_count = 0 ip_array = {} for eachLine in fp: ip = eachLine.split(" ")[0] if ip_array.has_key(ip): ip_array[ip] = ip_array[ip] + 1
tanmx
2018/05/25
1.3K0
从ceph对象中提取RBD中的指定文件
之前有个想法,是不是有办法找到rbd中的文件与对象的关系,想了很久但是一直觉得文件系统比较复杂,在fs 层的东西对ceph来说是透明的,并且对象大小是4M,而文件很小,可能在fs层进行了合并,应该很难找到对应关系,最近看到小胖有提出这个问题,那么就再次尝试了,现在就是把这个实现方法记录下来 这个提取的作用个人觉得最大的好处就是一个rbd设备,在文件系统层被破坏以后,还能够从rbd提取出文件,我们知道很多情况下设备的文件系统一旦破坏,无法挂载,数据也就无法读取,而如果能从rbd中提取出文件,这就是保证了即使文件系统损坏的情况下,数据至少不丢失
用户2772802
2018/08/06
4.9K0
如何从 Debian 系统中的 DEB 包中提取文件?
DEB 包是 Debian 系统中常见的软件包格式,用于安装和管理软件。有时候,您可能需要从 DEB 包中提取特定的文件,以便查看其内容、修改或进行其他操作。本文将详细介绍如何从 Debian 系统中的 DEB 包中提取文件,并提供相应的示例。
网络技术联盟站
2023/06/08
3.5K0
如何从 Debian 系统中的 DEB 包中提取文件?
Redo 日志从产生到写入日志文件
对于这样的剧情,想必大家不会陌生:美国大片中拯救世界的英雄,平时看起来跟普通人没啥区别,甚至还可能会有点让人看不上。
csch
2022/09/05
4620
Redo 日志从产生到写入日志文件
2021-10-13:单词接龙。字典 wordList 中从单词 beginWor
2021-10-13:单词接龙。字典 wordList 中从单词 beginWord 和 endWord 的 转换序列 是一个按下述规格形成的序列:序列中第一个单词是 beginWord 。序列中最后一个单词是 endWord 。每次转换只能改变一个字母。转换过程中的中间单词必须是字典 wordList 中的单词。给你两个单词 beginWord 和 endWord 和一个字典 wordList ,找到从 beginWord 到 endWord 的 最短转换序列 中的 单词数目 。如果不存在这样的转换序列,返回 0。力扣127。
福大大架构师每日一题
2021/10/13
6390
fastq-dump从SRA文件中提取fastq文件
fastq-dump是SRAtoolkit中使用频率很高的命令,用于从SRA文件中拆解提取fastq文件。具体用法如下:
戈贝尔光和热
2018/12/27
8.8K0
Linux下从PDF文件中提取图片
PDF 其实本质上是一个文件包,比如某些 PDF 文件中有插图,这些插图都包含在这个 PDF 文件包中。Linux 下可以使用 pdfimages 命令来从 PDF 文件中提取图片文件。如果你的 Linux 发行版上没有该命令,需要安装 poppler-utils 软件。pdfimages 命令的语法格式如下:
hotarugali
2022/02/28
2.6K0
使用Python从PDF文件中提取数据
数据是数据科学中任何分析的关键,大多数分析中最常用的数据集类型是存储在逗号分隔值(csv)表中的干净数据。然而,由于可移植文档格式(pdf)文件是最常用的文件格式之一,因此每个数据科学家都应该了解如何从pdf文件中提取数据,并将数据转换为诸如“csv”之类的格式,以便用于分析或构建模型。
HuangWeiAI
2020/07/27
4K0
使用Python从PDF文件中提取数据
linux下提取日志文件中的某一行JSON数据中的指定Key
今天在定位问题时,通过日志打印出来调用第三方接口的返回结果对象的值,但因为这个返回信息太多,导致日志打印时对应的这行日志翻了四五屏才结束,这种情况下不好复制粘贴出来去具体分析返回结果对象,主要是我们需要针对返回的json对象提取对应的key去进行分析查询。
翎野君
2023/05/12
5.3K0
从 PE 文件资源表中提取文件的版本信息
前段时间需要实现对 Windows PE 文件版本信息的提取,如文件说明、文件版本、产品名称、版权、原始文件名等信息。获取这些信息在 Windows 下当然有一系列的 API 函数供调用,简单方便。但是当需要在 Linux 操作系统平台下提取 PE 文件的版本信息数据时,就需要自己对 PE 文件的结构进行手动解析。
稻草小刀
2022/12/12
3.3K0
从 PE 文件资源表中提取文件的版本信息
python 统计文件中单词出现的频率
index = {} with open(sys.argv[1], encoding='utf-8') as fp: for line_no, line in enumerate(fp, 1): for match in WORD_RE.finditer(line): word = match.group() column_no = match.start()+1 location = (line_no, column_no) # this is ugly; coded like this to make a point occurrences = index.get(word, []) # <1> occurrences.append(location) # <2> index[word] = occurrences # <3>
用户5760343
2019/07/31
1.9K0
如何从Docker镜像中提取恶意文件
首先,需要从镜像运行启动一个容器,然后,使用docker cp命令从容器中提取文件到宿主机。
Bypass
2023/09/12
3170
如何从Docker镜像中提取恶意文件
从pdb文件中提取蛋白质序列
https://swift.cmbi.umcn.nl/servers/html/soupir.html
用户1359560
2020/09/08
3.9K0
从pdb文件中提取蛋白质序列
将Error异常日志从普通日志中剥离
  开发过程中经常需要调试和线上环境查看异常日志的需求,但普通消息与异常消息混在一起实在是非常难得找,上则NM的文档够你头痛,所以就将Error级别的日志抽离出来。   本示例采用log4net来配置:   1、先配置web.config,添加: <configSections> <!-- 添加log4net配置节 --> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4n
欢醉
2018/01/22
7500
将Error异常日志从普通日志中剥离
python:如何从 URL 中快速提取域名?
有时候,我们要从一段很长的 URL 里面提取出域名。例如从https://www.kingname.info/2020/10/02/copy-from-ssh/,我需要获取的是kingname.info。
王图思睿
2021/06/16
9.1K0
python 统计文件中单词出现的频率2
index = {} with open(sys.argv[1], encoding='utf-8') as fp: for line_no, line in enumerate(fp, 1): for match in WORD_RE.finditer(line): word = match.group() column_no = match.start()+1 location = (line_no, column_no) index.setdefault(word, []).append(location) # <1>
用户5760343
2019/07/31
1.3K0
从excel文件xlsx中特定单元格中提取图片「建议收藏」
第一种网上通用的用xlsx改zip压缩包,能批量提取出图片。但是无法知道图片在单元格中的顺序信息。
全栈程序员站长
2022/09/14
6.3K0
如何使用IPGeo从捕捉的网络流量文件中快速提取IP地址
 关于IPGeo  IPGeo是一款功能强大的IP地址提取工具,该工具基于Python 3开发,可以帮助广大研究人员从捕捉到的网络流量文件(pcap/pcapng)中提取出IP地址,并生成CSV格式的报告。在生成的报告文件中,将提供每一个数据包中每一个IP地址的地理位置信息详情。  报告中包含的内容  该工具生成的CSV格式报告中将包含下列与目标IP地址相关的内容: 1、国家; 2、国家码; 3、地区; 4、地区名称; 5、城市; 6、邮编; 7、经度; 8、纬度; 9
FB客服
2023/03/29
6.7K0
如何使用IPGeo从捕捉的网络流量文件中快速提取IP地址
Excel: 提取路径中的文件名
文章背景:在日常工作中,有时需要从绝对路径中提取文件名。比如,已知某个文件的存储路径,想要获取最后的文件名称。下面介绍两种方法。
Exploring
2022/09/20
2.7K0
Excel: 提取路径中的文件名
如何使用UnBlob从任意格式容器中提取文件
 关于UnBlob  UnBlob是一款针对容器安全的强大工具,该工具可以从任意格式的容器中提取文件。该工具运行速度非常快,准确率高,并且易于使用。UnBlob能够解析已知的超过30种不同格式的文档、压缩文件和文件系统,并能够从中递归提取文件内容。 UnBlob是完全开源免费的,并提供了一个命令行接口。除此之外,该工具还能够以Python库的形式来使用。这些特性使得UnBlob成为文件/数据提取、分析和逆向固件镜像的完美工具。 工具特性  1、准确率高:支持使用自定义规则识别数据区块的起始偏移量,并根
FB客服
2023/03/29
1.5K0
如何使用UnBlob从任意格式容器中提取文件

相似问题

如何解决空消息的toString何时到来?

12

值不显示子文件夹何时到来

10

Mongodb + Node:何时关闭

11

是否知道设备何时收到来自oneSingnal的通知?

25

如何知道何时收到来自服务器的响应?

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文