2016-06-03 3 views
1

Ich habe ein Dataset in BigQuery mit einigen Berechtigungen für es.Wie eine neue Ansicht Zugriff auf ein BigQuery-Dataset über API (Patch) geben

Über die API möchte ich eine neue Ansicht für diesen Datensatz zulassen. Mit Hilfe der patch Methode:

... 
#permission the view 
dataset_ref = {'datasetId': 'dataset_b', 'projectId': 'foo'} 
update = {'access': [ 
      { 
      "view": { 
       "projectId": 'foo', 
       "datasetId": 'dataset_b', 
       "tableId": 'v_test' 
      } 
      } 
     ]} 
datasets = service.datasets() 
datasets.patch(body=update, **dataset_ref).execute() 

Aber statt Zugabe die neue Ansicht in der Liste der genehmigten Ansichten, ersetzt sie alle. Ich dachte, nur die update Methode würde dies tun. Aus dem Update docs:

Warnung: Die angegebene Zugriffsliste vollständig überschreibt die vorhandene Zugriffsliste. Wenn Sie eine leere Zugriffsliste angeben, widerrufen Sie Zugriff auf alle außer Ihnen selbst; Sie können nicht alle Eigentümer aus einem Datensatz entfernen.

aus der Patch-Dokumentation:

Updates Informationen in einem vorhandenen Datensatz. Die Aktualisierungsmethode ersetzt die gesamte Dataset-Ressource, während die Patch-Methode nur Felder ersetzt, die in der übergebenen Dataset-Ressource bereitgestellt werden. Diese -Methode unterstützt Patch-Semantik.

Ist es möglich, einfach eine neue Ansicht mit der Patch-Methode hinzuzufügen?

(ich weiß, es ist möglich, mehrere Ansichten in der Patch-Anforderung zur Verfügung zu stellen, aber das würde bedeuten, den Datensatz zunächst für all vorhandenen Berechtigungen zum Abfragen mit und dann den neuen - chaotisch)

Antwort

2

Die Update-Methode ersetzt die gesamte Dataset-Ressource, während die Patch-Methode nur die Felder ersetzt, die in der übergebenen Dataset-Ressource enthalten sind.

Der Schlüssel oben ist - die Patch-Methode ersetzt nur Felder, die zur Verfügung gestellt werden
Das bedeutet, dass der Zugang Eigenschaft ersetzt werden - die gesamte Zugriffseigenschaft (mit Fall Ausnahme, wenn Sie leere Liste zur Verfügung stellen - weil mindestens ein Eigentümer muss jederzeit) vorhanden sein

So, leider Sie ganze acl Liste zur Verfügung stellen müssen, indem man zuerst aktuellen acl Abrufen und das Hinzufügen neuer Einträge, um es

+0

Bummer. Ich frage mich, ob es sich lohnt, diese Funktionalität anzufordern. Es ist wirklich peinlich, einen zusätzlichen Anruf tätigen zu müssen, um alle ACLs abzurufen und dann anzufügen, und dann alle zurückzusenden. –

+0

Überlegen Sie, wie viele verschiedene Änderungen Sie potenziell auf einmal vornehmen können. Ändern Sie den Zugriff, widerrufen Sie den Zugriff, fügen Sie einen neuen Zugang hinzu und all diese für mehrere Elemente. Ich denke, dass der aktuelle Ansatz es einfach macht - Sie laden existierende acl - Sie machen alle notwendigen Änderungen und Sie senden zurück acl. es macht Sinn für mich (wie es jetzt ist) –

+1

zur gleichen Zeit - interessant - Storage Team näherte sich dies anders - https://cloud.google.com/storage/docs/json_api/v1/bucketAccessControls - es könnte einen Grund geben dafür –

Verwandte Themen