Обновление доступа к набору данных BigQuery с C# - PullRequest
1 голос
/ 04 марта 2020

Я работаю с BigQuery. Я создаю DataSet и хочу определить права доступа на языке C#. Мне не понятно, как это сделать. На веб-странице GOOGLE https://cloud.google.com/bigquery/docs/dataset-access-controls объясняется, как это сделать, с некоторыми примерами для Java и Pyton (см. Ниже), но для c#.

example in pyton:
dataset = client.get_dataset(dataset_id)  # Make an API request.

entry = bigquery.AccessEntry(
    role="READER",
    entity_type="userByEmail",
    entity_id="sample.bigquery.dev@gmail.com",
)

entries = list(dataset.access_entries)
entries.append(entry)
dataset.access_entries = entries

dataset = client.update_dataset(dataset, ["access_entries"])  # Make an API request.

full_dataset_id = "{}.{}".format(dataset.project, dataset.dataset_id)
* не приводится никакого примера. 1006 * Может кто-нибудь помочь, пожалуйста?

Ответы [ 2 ]

2 голосов
/ 06 марта 2020

Вероятно, лучше использовать метод BigQueryDataset.Patch из пакета Google.Cloud.BigQuery.V2:

// Fetch the existing dataset
var client = BigQueryClient.Create(projectId);
var dataset = client.GetDataset(datasetId);

var accessList = dataset.Resource.Access ?? new List<AccessData>();
accessList.Add(new AccessData
{
    Role = "Reader",
    UserByEmail = "sample.bigquery.dev@gmail.com"
});
var patchedResource = new Dataset { Access = accessList };

// Push the changes back up to BigQuery
dataset.Patch(patchedResource, matchETag: true);

В качестве альтернативы вы можете использовать Update для полного обновления ресурса набора данных замены:

// Fetch the existing dataset
var client = BigQueryClient.Create(projectId);
var dataset = client.GetDataset(datasetId);

// Modify it in memory
var resource = dataset.Resource;
if (resource.Access is null)
{
    // If there's no access list yet, create one.
    resource.Access = new List<AccessData>();
}
var newAccess = new AccessData
{
    Role = "Reader",
    UserByEmail = "sample.bigquery.dev@gmail.com"
};
resource.Access.Add(newAccess);

// Push the changes back up to BigQuery
dataset.Update();
0 голосов
/ 09 марта 2020

На и мне удалось заставить его работать. Я использовал то же решение, которое предложил Джон Скит, используя метод Patch. Я прилагаю свой код здесь.

publi c stati c bool GrantDatasetAccess (строка dataSetId, bool online, роль строки, строка электронной почты, строка bigQueryJsonPath, строка bigQueryScope, строка projectId, журнал clsLog) {

        try
        {
            BigQueryClient client = GetBigQueryClient(online, bigQueryJsonPath, bigQueryScope, projectId);
            BigQueryDataset dataset = GetDataSet(online, dataSetId, bigQueryJsonPath, bigQueryScope, projectId, log);

            List<AccessData> accessList = new List<AccessData>();
            var accessData = new AccessData()
            {
                Role = role,
                GroupByEmail = null,
                UserByEmail = email,
                SpecialGroup = null,
                IamMember = null,
                Domain = null,
                View = null

            };
            accessList.Add(accessData);
            dataset.Resource.Access = accessList;
            dataset.Patch(dataset.Resource, true);
        }
        catch (Exception e)
        {
            log.ManageError("Error GetDataSet: {0}\nError: {1}", dataSetId, string.Concat(e.Message, "\n", e.StackTrace));
        }
        return true;
    }
...