C# 从C更新BigQuery数据集访问#
我正在与BigQuery合作。我创建了一个数据集,我想用C语言定义访问权限。 我不清楚怎么做。 在GOOGLE网页中,我们用Java和Pyton的一些例子解释了如何实现这一点(见下文),但没有为c#提供任何例子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
有人能帮忙吗?最好使用
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;
}