Strukturierte Zeilenschlüsselabfragen

Wenn eine Tabelle ein Zeilenschlüssel-Schema mit strukturierten Zeilenschlüsseln hat, können Sie die einzelnen Segmente oder Spalten des Zeilenschlüssels mit SQL abfragen.

Bei kontinuierlichen materialisierten Ansichten, einschließlich globaler sekundärer Indexe, werden standardmäßig strukturierte Zeilenschlüssel generiert. Sie können auch einen strukturierten Zeilenschlüssel für jede Bigtable-Tabelle definieren, die Sie mit SQL abfragen möchten. Dazu erstellen Sie ein Zeilenschlüssel-Schema für die Tabelle. Weitere Informationen finden Sie unter Schemas für Zeilenschlüssel verwalten.

Schlüssel

In einer Bigtable-Tabelle ohne strukturiertes Zeilenschlüsselschema wird jede Zeile durch einen einzelnen Zeilenschlüssel indexiert. Wenn Sie die Tabelle mit SQL abfragen, ist der Zeilenschlüssel eine Spalte mit dem Namen _key, die von SQL als Primärschlüssel verwendet wird. Es handelt sich nicht um eine Pseudospalte. Daher werden Werte in der Spalte _key zurückgegeben, wenn Sie eine SELECT *-Abfrage für die Tabelle ausführen.

In einer Tabelle mit einem Zeilenschlüssel-Schema ist der Zeilenschlüssel (Primärschlüssel) die Kombination aller Spalten, die als Felder im Zeilenschlüssel-Schema angegeben sind. Wenn Sie einer Tabelle ein Zeilenschlüsselschema hinzufügen, wird die Spalte _key zu einer Pseudospalte. Das bedeutet, dass sie nicht in einer SELECT *-Abfrage angezeigt wird, Sie sie aber explizit mit einer SELECT _key-Anweisung auswählen können.

Beispielabfragen

In den Beispielen in diesem Abschnitt wird davon ausgegangen, dass eine Tabelle mit dem Namen sales das folgende Schema hat:

  field {
    field_name: "user_id"
    type: { bytes_type { encoding { raw {} } } }
  }
  field {
    field_name: "purchase_date"
    type: { string_type { encoding { utf8_bytes {} } } }
  }
  field {
    field_name: "order_number"
    type: { string_type { encoding { utf8_bytes {} } } }
  }
  encoding {
    delimited_bytes { delimiter "#" }
  }

Die Tabelle sales enthält die folgenden Daten. Die Spaltenfamilie product hat zwei Spalten.

Zeilenschlüssel Produkt
  product_type product_name
"user1#2025-05-20#abcd1233" „phone“ „iPhone16_pro_max“
"user1#2025-05-20#abcd1235" „Schuhe“ „nike_hyperdunk“
„user2#2025-05-24#defg456“ „Kopfhörer“ „sony_wh_1000mx5“

Strukturierte Ergebnisse von Zeilenschlüsselabfragen

Da die Tabelle sales strukturierte Zeilenschlüssel hat, wird bei einer Abfrage der Tabelle mit einer SELECT *-Anweisung jedes Segment des Zeilenschlüssels als separate Spalte zurückgegeben. Wie bei jeder SQL-Abfrage für eine Bigtable-Tabelle werden Spalten in einer Spaltenfamilie als Maps ausgedrückt.

  SELECT * from sales

Die Ergebnisse sehen so aus:

user_id purchase_date order_number Produkt
Nutzer 1 2025-05-20 "abcd1233" { product_type: "phone", product_name: "iPhone16_pro_max" }
Nutzer 1 2025-05-20 "abcd1235" { product_type: "shoes", product_name: "nike_hyperdunk" }
Nutzerin 2 2025-05-24 „defg456“ { product_type: "headphones", product_name: "sony_wh_1000mx5" }

Sie können die Spalten für Zeilenschlüssel auch in Ihrer Abfrage angeben, wie im folgenden Beispiel gezeigt:

  SELECT
    product[product_type] AS product_type,
    product[product_name] AS product_name
  FROM sales
  WHERE user_id = b"user1"

Das Ergebnis sieht in etwa so aus:

product_type product_name
„phone“ „iphone16_pro_max“
„Schuhe“ „nike_hyperdunk“

Filter

Sie können die Spalten des Zeilenschlüsselschemas mit SQL-Funktionen filtern. Im folgenden Beispiel wird davon ausgegangen, dass CURRENT_DATE() den Wert 2025-05-24 zurückgibt:

  SELECT
    user_id,
    product["product_name"] AS product_name
  FROM
    sales
  WHERE
    PARSE_DATE("YYYY-MM-DD", purchase_date) = CURRENT_DATE()
    AND user_id = b"user2"

Die folgenden Ergebnisse werden ausgegeben:

user_id product_name
Nutzerin 2 „sony_wh_1000mx5“

Aggregatabfragen

Das folgende Beispiel zeigt, wie Sie eine Aggregatabfrage für strukturierte Zeilenschlüsselfelder verwenden:

  SELECT
    user_id,
    product[product_type] AS product_type,
    count(*) AS count
  FROM sales
  GROUP BY 1, 2

Die Abfrageergebnisse sehen so aus:

user_id product_type Anzahl
Nutzer 1 Telefon 1
Nutzer 1 Schuhe 1
Nutzerin 2 Kopfhörer 1

Originalzeilenschlüssel

Wenn Sie den ursprünglichen Zeilenschlüssel in einer Tabelle mit strukturierten Zeilenschlüsseln abrufen möchten, geben Sie die Spalte _key in Ihrer Abfrage an.

  SELECT
    _key, user_id
  FROM sales

Die Abfrage gibt Folgendes zurück:

_key user_id
"user1#2025-05-20#abcd1233" Nutzer 1
"user1#2025-05-20#abcd1235" Nutzer 1
„user2#2025-05-24#defg456“ Nutzerin 2

Nächste Schritte