bigtable/reads/reads.go (169 lines of code) (raw):

// Copyright 2019 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package reads contains snippets related to reading data from Cloud Bigtable. package reads // [START bigtable_reads_imports] import ( "context" "fmt" "io" "strings" "cloud.google.com/go/bigtable" ) // [END bigtable_reads_imports] // [START bigtable_reads_row] func readRow(w io.Writer, projectID, instanceID string, tableName string) error { // projectID := "my-project-id" // instanceID := "my-instance-id" // tableName := "mobile-time-series" ctx := context.Background() client, err := bigtable.NewClient(ctx, projectID, instanceID) if err != nil { return fmt.Errorf("bigtable.NewClient: %w", err) } defer client.Close() tbl := client.Open(tableName) rowKey := "phone#4c410523#20190501" row, err := tbl.ReadRow(ctx, rowKey) if err != nil { return fmt.Errorf("could not read row with key %s: %w", rowKey, err) } printRow(w, row) return nil } // [END bigtable_reads_row] // [START bigtable_reads_row_partial] func readRowPartial(w io.Writer, projectID, instanceID string, tableName string) error { // projectID := "my-project-id" // instanceID := "my-instance-id" // tableName := "mobile-time-series" ctx := context.Background() client, err := bigtable.NewClient(ctx, projectID, instanceID) if err != nil { return fmt.Errorf("bigtable.NewClient: %w", err) } defer client.Close() tbl := client.Open(tableName) rowKey := "phone#4c410523#20190501" row, err := tbl.ReadRow(ctx, rowKey, bigtable.RowFilter(bigtable.ColumnFilter("os_build"))) if err != nil { return fmt.Errorf("could not read row with key %s: %w", rowKey, err) } printRow(w, row) return nil } // [END bigtable_reads_row_partial] // [START bigtable_reads_rows] func readRows(w io.Writer, projectID, instanceID string, tableName string) error { // projectID := "my-project-id" // instanceID := "my-instance-id" // tableName := "mobile-time-series" ctx := context.Background() client, err := bigtable.NewClient(ctx, projectID, instanceID) if err != nil { return fmt.Errorf("bigtable.NewClient: %w", err) } defer client.Close() tbl := client.Open(tableName) err = tbl.ReadRows(ctx, bigtable.RowList{"phone#4c410523#20190501", "phone#4c410523#20190502"}, func(row bigtable.Row) bool { printRow(w, row) return true }, ) if err != nil { return fmt.Errorf("tbl.ReadRows: %w", err) } return nil } // [END bigtable_reads_rows] // [START bigtable_reverse_scan] func readRowsReversed(w io.Writer, projectID, instanceID string, tableName string) error { // projectID := "my-project-id" // instanceID := "my-instance-id" // tableName := "mobile-time-series" ctx := context.Background() client, err := bigtable.NewClient(ctx, projectID, instanceID) if err != nil { return fmt.Errorf("bigtable.NewClient: %w", err) } defer client.Close() tbl := client.Open(tableName) err = tbl.ReadRows(ctx, bigtable.NewRange("phone#5c10102", "phone#5c10103"), func(row bigtable.Row) bool { printRow(w, row) return true }, bigtable.ReverseScan()) if err != nil { return fmt.Errorf("tbl.ReadRows: %w", err) } return nil } // [END bigtable_reverse_scan] // [START bigtable_reads_row_range] func readRowRange(w io.Writer, projectID, instanceID string, tableName string) error { // projectID := "my-project-id" // instanceID := "my-instance-id" // tableName := "mobile-time-series" ctx := context.Background() client, err := bigtable.NewClient(ctx, projectID, instanceID) if err != nil { return fmt.Errorf("bigtable.NewClient: %w", err) } defer client.Close() tbl := client.Open(tableName) err = tbl.ReadRows(ctx, bigtable.NewRange("phone#4c410523#20190501", "phone#4c410523#201906201"), func(row bigtable.Row) bool { printRow(w, row) return true }, ) if err != nil { return fmt.Errorf("tbl.ReadRows: %w", err) } return nil } // [END bigtable_reads_row_range] // [START bigtable_reads_row_ranges] func readRowRanges(w io.Writer, projectID, instanceID string, tableName string) error { // projectID := "my-project-id" // instanceID := "my-instance-id" // tableName := "mobile-time-series" ctx := context.Background() client, err := bigtable.NewClient(ctx, projectID, instanceID) if err != nil { return fmt.Errorf("bigtable.NewClient: %w", err) } defer client.Close() tbl := client.Open(tableName) err = tbl.ReadRows(ctx, bigtable.RowRangeList{ bigtable.NewRange("phone#4c410523#20190501", "phone#4c410523#201906201"), bigtable.NewRange("phone#5c10102#20190501", "phone#5c10102#201906201"), }, func(row bigtable.Row) bool { printRow(w, row) return true }, ) if err != nil { return fmt.Errorf("tbl.ReadRows: %w", err) } return nil } // [END bigtable_reads_row_ranges] // [START bigtable_reads_prefix] func readPrefix(w io.Writer, projectID, instanceID string, tableName string) error { // projectID := "my-project-id" // instanceID := "my-instance-id" // tableName := "mobile-time-series" ctx := context.Background() client, err := bigtable.NewClient(ctx, projectID, instanceID) if err != nil { return fmt.Errorf("bigtable.NewClient: %w", err) } defer client.Close() tbl := client.Open(tableName) err = tbl.ReadRows(ctx, bigtable.PrefixRange("phone#"), func(row bigtable.Row) bool { printRow(w, row) return true }, ) if err != nil { return fmt.Errorf("tbl.ReadRows: %w", err) } return nil } // [END bigtable_reads_prefix] // [START bigtable_reads_filter] func readFilter(w io.Writer, projectID, instanceID string, tableName string) error { // projectID := "my-project-id" // instanceID := "my-instance-id" // tableName := "mobile-time-series" ctx := context.Background() client, err := bigtable.NewClient(ctx, projectID, instanceID) if err != nil { return fmt.Errorf("bigtable.NewClient: %w", err) } defer client.Close() tbl := client.Open(tableName) err = tbl.ReadRows(ctx, bigtable.RowRange{}, func(row bigtable.Row) bool { printRow(w, row) return true }, bigtable.RowFilter(bigtable.ValueFilter("PQ2A.*$")), ) if err != nil { return fmt.Errorf("tbl.ReadRows: %w", err) } return nil } // [END bigtable_reads_filter] // [START bigtable_reads_print] func printRow(w io.Writer, row bigtable.Row) { fmt.Fprintf(w, "Reading data for %s:\n", row.Key()) for columnFamily, cols := range row { fmt.Fprintf(w, "Column Family %s\n", columnFamily) for _, col := range cols { qualifier := col.Column[strings.IndexByte(col.Column, ':')+1:] fmt.Fprintf(w, "\t%s: %s @%d\n", qualifier, col.Value, col.Timestamp) } } fmt.Fprintln(w) } // [END bigtable_reads_print]