1

我创建了一个 C# 控制台应用程序来读取 BigQuery 数据。

当我第一次运行此控制台应用程序时,它会打开浏览器窗口以询问 Google 是否接受,但有时它不会在同一台机器上请求许可。

问题:它第一次询问每台机器的权限,如果是,那么部署BigQuery应用程序的最佳方式是哪种方式,bz客户端需要使用开发者ID接受Gmail访问?这是有道理的,或者在生产环境中处理 Google BigQuery 应用程序的最佳方法是哪种?

这是代码。

using Google.Apis.Auth.OAuth2;
using System.IO;
using System.Threading;
using Google.Apis.Bigquery.v2;
using Google.Apis.Bigquery.v2.Data;
using System.Data;
using Google.Apis.Services;
using System;

namespace GoogleBigQuery
{
    public class Class1
    {
        private static void Main()
        {
            UserCredential credential;
            using (var stream = new FileStream("client_secrets.json", FileMode.Open,
                                            FileAccess.Read))
            {
                credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
                   GoogleClientSecrets.Load(stream).Secrets,
                   new[] { BigqueryService.Scope.Bigquery },
                   "user", CancellationToken.None).Result;
            }

            //  Create and initialize the Bigquery service. Use the Project Name value
            //  from the New Project window for the ApplicationName variable.

            BigqueryService Service = new BigqueryService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = credential,
                ApplicationName = "PROJECT NAME"
            });

            string query = "YOUR QUERY";

            JobsResource j = Service.Jobs;
            QueryRequest qr = new QueryRequest();
            qr.Query = query;

            DataTable DT = new DataTable();
            int i = 0;

            QueryResponse response = j.Query(qr, "PROJECT ID").Execute();

            if (response != null)
            {
                int colCount = response.Schema.Fields.Count;

                foreach (var Column in response.Schema.Fields)
                {
                    DT.Columns.Add(Column.Name);
                }

                foreach (TableRow row in response.Rows)
                {
                    DataRow dr = DT.NewRow();

                    for (i = 0; i < colCount; i++)
                    {
                        dr[i] = row.F[i].V;
                    }

                    DT.Rows.Add(dr);
                }
            }
            else
            {
                Console.WriteLine("Response is null");
            }
        }
    }
}

谢谢, Selvakumar S

4

1 回答 1

1

我不是 C# 方面的专家,但我可以看到您正在使用“GoogleWebAuthorizationBroker” - 这确实是一个帮助类,它将打开一个网页以获取最终用户身份验证和授权。

使用 OAuth2ServiceAccount 代替 machine2machine 身份验证(https://developers.google.com/identity/protocols/OAuth2ServiceAccount)。

有关示例 C# 代码,请参阅“我在哪里可以找到 ServiceAccountCredential ”。

于 2015-06-15T15:37:45.550 回答