Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从C更新BigQuery数据集访问#_C#_Google Bigquery_Dataset_Roles_Access Rights - Fatal编程技术网

C# 从C更新BigQuery数据集访问#

C# 从C更新BigQuery数据集访问#,c#,google-bigquery,dataset,roles,access-rights,C#,Google Bigquery,Dataset,Roles,Access Rights,我正在与BigQuery合作。我创建了一个数据集,我想用C语言定义访问权限。 我不清楚怎么做。 在GOOGLE网页中,我们用Java和Pyton的一些例子解释了如何实现这一点(见下文),但没有为c#提供任何例子 有人能帮忙吗?最好使用Google.Cloud.BigQuery.V2软件包中的BigQueryDataset.Patch方法: //获取现有数据集 var client=BigQueryClient.Create(projectId); var-dataset=client.GetDa

我正在与BigQuery合作。我创建了一个数据集,我想用C语言定义访问权限。 我不清楚怎么做。 在GOOGLE网页中,我们用Java和Pyton的一些例子解释了如何实现这一点(见下文),但没有为c#提供任何例子


有人能帮忙吗?

最好使用
Google.Cloud.BigQuery.V2
软件包中的
BigQueryDataset.Patch
方法:

//获取现有数据集
var client=BigQueryClient.Create(projectId);
var-dataset=client.GetDataset(datasetId);
var accessList=dataset.Resource.Access??新列表();
添加(新的AccessData)
{
Role=“Reader”,
UserByEmail=“sample.bigquery。dev@gmail.com"
});
var patchedResource=新数据集{Access=accessList};
//将更改推回到BigQuery
Patch(patchedResource,matchETag:true);
或者,您可以使用
Update
来更新数据集并完全替换数据集资源:

//获取现有数据集
var client=BigQueryClient.Create(projectId);
var-dataset=client.GetDataset(datasetId);
//在内存中修改它
var resource=dataset.resource;
if(resource.Access为空)
{
//如果还没有访问列表,请创建一个。
resource.Access=新列表();
}
var newAccess=newaccessdata
{
Role=“Reader”,
UserByEmail=“sample.bigquery。dev@gmail.com"
};
resource.Access.Add(newAccess);
//将更改推回到BigQuery
dataset.Update();

在最后一刻,我设法让它工作起来。 我使用了Jon Skeet建议的相同解决方案,使用了补丁方法。 我在这里附上我的代码

公共静态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;
    }
试试看
{
BigQueryClient=GetBigQueryClient(在线、bigQueryJsonPath、bigQueryScope、projectId);
BigQueryDataset dataset=GetDataSet(联机、dataSetId、bigQueryJsonPath、bigQueryScope、projectId、log);
List accessList=新列表();
var accessData=new accessData()
{
角色,
GroupByEmail=null,
UserByEmail=电子邮件,
SpecialGroup=null,
IamMember=null,
域=空,
视图=空
};
accessList.Add(accessData);
dataset.Resource.Access=访问列表;
dataset.Patch(dataset.Resource,true);
}
捕获(例外e)
{
ManageError(“Error GetDataSet:{0}\n错误:{1}”,dataSetId,string.Concat(e.Message,“\n”,e.StackTrace));
}
返回true;
}

你好,Jon Skeet,非常感谢您的建议。我认为你的解决方案是好的。不幸的是,我以前没有读过它,但我实现了一些非常类似的东西,而且它很有效。唯一的区别是我在更新时使用了补丁函数。我将发布我的方法。@ClementeMadrassi:注意,我的第一个示例也使用了补丁。
        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;
    }