protected override async Task DeleteAsync(string persistenceId, SnapshotSelectionCriteria criteria) { var filter = RowFilters.Chain ( RowFilters.ColumnQualifierExact(SnapshotMetaDataColumnQualifier), // this filter ensures that we only download snapshot metadata RowFilters.TimestampRange( ToUtc(criteria.MinTimestamp), ToUtc(criteria.MaxTimeStamp)?.AddMilliseconds(1) // add a milliseconds since the upper bound is exclusive ), RowFilters.CellsPerColumnLimit(1) ); var readRowsRequest = new ReadRowsRequest { TableNameAsTableName = _tableName, Filter = filter, Rows = GetRowSet(persistenceId, criteria.MinSequenceNr, criteria.MaxSequenceNr) }; var deleteMutations = await _bigtableClient .ReadRows(readRowsRequest) .Select(SnapshotMetadataFromBigtableRow) .Where(metadata => SatisfiesTimestampCriteria(criteria, metadata)) .Select(metadata => Mutations.CreateEntry(GetRowKey(persistenceId, metadata.SequenceNr), Mutations.DeleteFromRow())) .ToList() .ConfigureAwait(false); if (deleteMutations.Count > 0) { await _bigtableClient.MutateRowsAsync(_tableName, deleteMutations).ConfigureAwait(false); } }
public override async Task <long> ReadHighestSequenceNrAsync(string persistenceId, long fromSequenceNr) { var rowRange = RowRange.ClosedOpen( ToRowKeyBigtableByteString(persistenceId, fromSequenceNr), ToRowKeyBigtableByteString(persistenceId, long.MaxValue)); var rows = RowSet.FromRowRanges(rowRange); var stream = _bigtableClient.ReadRows( _tableName, rows: rows, filter: RowFilters.Chain(RowFilters.CellsPerRowLimit(1), RowFilters.StripValueTransformer())); var lastRow = await stream.LastOrDefault().ConfigureAwait(false); return(lastRow == null ? 0L : GetSequenceNumber(lastRow)); }
/// <summary>Snippet for ReadRows</summary> public async Task ReadRowsRequestObject() { // Snippet: ReadRows(ReadRowsRequest, CallSettings) // Create client BigtableClient bigtableClient = BigtableClient.Create(); // Initialize request argument(s) ReadRowsRequest request = new ReadRowsRequest { TableNameAsTableName = TableName.FromProjectInstanceTable("[PROJECT]", "[INSTANCE]", "[TABLE]"), Rows = new RowSet(), Filter = new RowFilter(), RowsLimit = 0L, AppProfileId = "", }; // Make the request, returning a streaming response BigtableClient.ReadRowsStream response = bigtableClient.ReadRows(request); // Read streaming responses from server until complete // Note that C# 8 code can use await foreach AsyncResponseStream <ReadRowsResponse> responseStream = response.GetResponseStream(); while (await responseStream.MoveNextAsync()) { ReadRowsResponse responseItem = responseStream.Current; // Do something with streamed response } // The response stream has completed // End snippet }
public async Task ReadRows() { // Snippet: ReadRows(ReadRowsRequest,CallSettings) // Create client BigtableClient bigtableClient = BigtableClient.Create(); // Initialize request argument ReadRowsRequest request = new ReadRowsRequest { TableName = new TableName("[PROJECT]", "[INSTANCE]", "[TABLE]").ToString(), }; // Make the request, returning a streaming response BigtableClient.ReadRowsStream streamingResponse = bigtableClient.ReadRows(request); // Read streaming responses from server until complete IAsyncEnumerator <ReadRowsResponse> responseStream = streamingResponse.ResponseStream; while (await responseStream.MoveNext()) { ReadRowsResponse response = responseStream.Current; // Do something with streamed response } // The response stream has completed // End snippet }
// [END bigtable_reads_row_partial] // [START bigtable_reads_rows] /// <summary> /// /// Reads multiple rows from an existing table. ///</summary> /// <param name="projectId">Your Google Cloud Project ID.</param> /// <param name="instanceId">Your Google Cloud Bigtable Instance ID.</param> /// <param name="tableId">Your Google Cloud Bigtable table ID.</param> public string readRows(string projectId = "YOUR-PROJECT-ID", string instanceId = "YOUR-INSTANCE-ID", string tableId = "YOUR-TABLE-ID") { BigtableClient bigtableClient = BigtableClient.Create(); TableName tableName = new TableName(projectId, instanceId, tableId); RowSet rowSet = RowSet.FromRowKeys("phone#4c410523#20190501", "phone#4c410523#20190502"); ReadRowsStream readRowsStream = bigtableClient.ReadRows(tableName, rowSet); string result = ""; readRowsStream.ForEach(row => result += printRow(row)); return(result); }
// [END bigtable_reads_prefix] // [START bigtable_reads_filter] /// <summary> /// /// Reads using a filter from an existing table. ///</summary> /// <param name="projectId">Your Google Cloud Project ID.</param> /// <param name="instanceId">Your Google Cloud Bigtable Instance ID.</param> /// <param name="tableId">Your Google Cloud Bigtable table ID.</param> public string readFilter(string projectId = "YOUR-PROJECT-ID", string instanceId = "YOUR-INSTANCE-ID", string tableId = "YOUR-TABLE-ID") { BigtableClient bigtableClient = BigtableClient.Create(); TableName tableName = new TableName(projectId, instanceId, tableId); RowFilter filter = RowFilters.ValueRegex("PQ2A.*"); ReadRowsStream readRowsStream = bigtableClient.ReadRows(tableName, filter: filter); string result = ""; readRowsStream.ForEach(row => result += printRow(row)); return(result); }
// [END bigtable_filters_composing_condition] // [START bigtable_filters_limit_row_sample] // [START bigtable_filters_limit_row_regex] // [START bigtable_filters_limit_cells_per_col] // [START bigtable_filters_limit_cells_per_row] // [START bigtable_filters_limit_cells_per_row_offset] // [START bigtable_filters_limit_col_family_regex] // [START bigtable_filters_limit_col_qualifier_regex] // [START bigtable_filters_limit_col_range] // [START bigtable_filters_limit_value_range] // [START bigtable_filters_limit_value_regex] // [START bigtable_filters_limit_timestamp_range] // [START bigtable_filters_limit_block_all] // [START bigtable_filters_limit_pass_all] // [START bigtable_filters_modify_strip_value] // [START bigtable_filters_modify_apply_label] // [START bigtable_filters_composing_chain] // [START bigtable_filters_composing_interleave] // [START bigtable_filters_composing_condition] public string readFilter(string projectId, string instanceId, string tableId, RowFilter filter) { BigtableClient bigtableClient = BigtableClient.Create(); TableName tableName = new TableName(projectId, instanceId, tableId); ReadRowsStream readRowsStream = bigtableClient.ReadRows(tableName, filter: filter); string result = ""; readRowsStream.ForEach(row => result += printRow(row)); if (result == "") { return("empty"); } return(result); }
// [END bigtable_reads_rows] // [START bigtable_reads_row_range] /// <summary> /// /// Reads a range of rows from an existing table. ///</summary> /// <param name="projectId">Your Google Cloud Project ID.</param> /// <param name="instanceId">Your Google Cloud Bigtable Instance ID.</param> /// <param name="tableId">Your Google Cloud Bigtable table ID.</param> public string readRowRange(string projectId = "YOUR-PROJECT-ID", string instanceId = "YOUR-INSTANCE-ID", string tableId = "YOUR-TABLE-ID") { String start = "phone#4c410523#20190501"; String end = "phone#4c410523#201906201"; BigtableClient bigtableClient = BigtableClient.Create(); TableName tableName = new TableName(projectId, instanceId, tableId); RowSet rowSet = RowSet.FromRowRanges(RowRange.ClosedOpen(start, end)); ReadRowsStream readRowsStream = bigtableClient.ReadRows(tableName, rowSet); string result = ""; readRowsStream.ForEach(row => result += printRow(row)); return(result); }
// [END bigtable_reads_row_ranges] // [START bigtable_reads_prefix] /// <summary> /// /// Reads rows starting with a prefix from an existing table. ///</summary> /// <param name="projectId">Your Google Cloud Project ID.</param> /// <param name="instanceId">Your Google Cloud Bigtable Instance ID.</param> /// <param name="tableId">Your Google Cloud Bigtable table ID.</param> public string readPrefix(string projectId = "YOUR-PROJECT-ID", string instanceId = "YOUR-INSTANCE-ID", string tableId = "YOUR-TABLE-ID") { BigtableClient bigtableClient = BigtableClient.Create(); TableName tableName = new TableName(projectId, instanceId, tableId); String prefix = "phone"; Char prefixEndChar = prefix[prefix.Length - 1]; prefixEndChar++; String end = prefix.Substring(0, prefix.Length - 1) + prefixEndChar; RowSet rowSet = RowSet.FromRowRanges(RowRange.Closed(prefix, end)); ReadRowsStream readRowsStream = bigtableClient.ReadRows(tableName, rowSet); string result = ""; readRowsStream.ForEach(row => result += printRow(row)); return(result); }
/// <summary>Snippet for ReadRows</summary> /// <remarks> /// This snippet has been automatically generated for illustrative purposes only. /// It may require modifications to work in your environment. /// </remarks> public async Task ReadRows1() { // Create client BigtableClient bigtableClient = BigtableClient.Create(); // Initialize request argument(s) string tableName = "projects/[PROJECT]/instances/[INSTANCE]/tables/[TABLE]"; // Make the request, returning a streaming response BigtableClient.ReadRowsStream response = bigtableClient.ReadRows(tableName); // Read streaming responses from server until complete // Note that C# 8 code can use await foreach AsyncResponseStream <ReadRowsResponse> responseStream = response.GetResponseStream(); while (await responseStream.MoveNextAsync()) { ReadRowsResponse responseItem = responseStream.Current; // Do something with streamed response } // The response stream has completed }
/// <summary>Snippet for ReadRows</summary> /// <remarks> /// This snippet has been automatically generated for illustrative purposes only. /// It may require modifications to work in your environment. /// </remarks> public async Task ReadRows2ResourceNames() { // Create client BigtableClient bigtableClient = BigtableClient.Create(); // Initialize request argument(s) TableName tableName = TableName.FromProjectInstanceTable("[PROJECT]", "[INSTANCE]", "[TABLE]"); string appProfileId = ""; // Make the request, returning a streaming response BigtableClient.ReadRowsStream response = bigtableClient.ReadRows(tableName, appProfileId); // Read streaming responses from server until complete // Note that C# 8 code can use await foreach AsyncResponseStream <ReadRowsResponse> responseStream = response.GetResponseStream(); while (await responseStream.MoveNextAsync()) { ReadRowsResponse responseItem = responseStream.Current; // Do something with streamed response } // The response stream has completed }
private static void DoHelloWorld() { try { // [START bigtable_hw_connect] // BigtableTableAdminClient API lets us create, manage and delete tables. BigtableTableAdminClient bigtableTableAdminClient = BigtableTableAdminClient.Create(); // BigtableClient API lets us read and write to a table. BigtableClient bigtableClient = BigtableClient.Create(); // [END bigtable_hw_connect] // [START bigtable_hw_create_table] // Create a table with a single column family. Console.WriteLine($"Create new table: {tableId} with column family: {columnFamily}, instance: {instanceId}"); // Check whether a table with given TableName already exists. if (!TableExist(bigtableTableAdminClient)) { bigtableTableAdminClient.CreateTable( new InstanceName(projectId, instanceId), tableId, new Table { Granularity = Table.Types.TimestampGranularity.Millis, ColumnFamilies = { { columnFamily, new ColumnFamily { GcRule = new GcRule { MaxNumVersions = 1 } } } } }); // Confirm that table was created successfully. Console.WriteLine(TableExist(bigtableTableAdminClient) ? $"Table {tableId} created successfully\n" : $"There was a problem creating a table {tableId}"); } else { Console.WriteLine($"Table: {tableId} already exists"); } // [END bigtable_hw_create_table] // [START bigtable_hw_write_rows] // Initialize Google.Cloud.Bigtable.V2.TableName object. Google.Cloud.Bigtable.Common.V2.TableName tableName = new Google.Cloud.Bigtable.Common.V2.TableName(projectId, instanceId, tableId); // Write some rows /* Each row has a unique row key. * * Note: This example uses sequential numeric IDs for simplicity, but * this can result in poor performance in a production application. * Since rows are stored in sorted order by key, sequential keys can * result in poor distribution of operations across nodes. * * For more information about how to design a Bigtable schema for the * best performance, see the documentation: * * https://cloud.google.com/bigtable/docs/schema-design */ Console.WriteLine($"Write some greetings to the table {tableId}"); // Insert 1 row using MutateRow() s_greetingIndex = 0; try { bigtableClient.MutateRow(tableName, rowKeyPrefix + s_greetingIndex, MutationBuilder()); Console.WriteLine($"\tGreeting: -- {s_greetings[s_greetingIndex],-18}-- written successfully"); } catch (Exception ex) { Console.WriteLine($"\tFailed to write greeting: --{s_greetings[s_greetingIndex]}"); Console.WriteLine(ex.Message); throw; } // Insert multiple rows using MutateRows() // Build a MutateRowsRequest (contains table name and a collection of entries). MutateRowsRequest request = new MutateRowsRequest { TableNameAsTableName = tableName }; s_mapToOriginalGreetingIndex = new List <int>(); while (++s_greetingIndex < s_greetings.Length) { s_mapToOriginalGreetingIndex.Add(s_greetingIndex); // Build an entry for every greeting (consists of rowkey and a collection of mutations). string rowKey = rowKeyPrefix + s_greetingIndex; request.Entries.Add(Mutations.CreateEntry(rowKey, MutationBuilder())); } // Make the request to write multiple rows. MutateRowsResponse response = bigtableClient.MutateRows(request); // Check the status code of each entry to ensure that it was written successfully. foreach (MutateRowsResponse.Types.Entry entry in response.Entries) { s_greetingIndex = s_mapToOriginalGreetingIndex[(int)entry.Index]; if (entry.Status.Code == 0) { Console.WriteLine($"\tGreeting: -- {s_greetings[s_greetingIndex],-18}-- written successfully"); } else { Console.WriteLine($"\tFailed to write greeting: --{s_greetings[s_greetingIndex]}"); Console.WriteLine(entry.Status.Message); } } Mutation MutationBuilder() => Mutations.SetCell(columnFamily, columnName, s_greetings[s_greetingIndex], new BigtableVersion(DateTime.UtcNow)); //[END bigtable_hw_write_rows] // [START bigtable_hw_create_filter] RowFilter filter = RowFilters.CellsPerRowLimit(1); // [END bigtable_hw_create_filter] // [START bigtable_hw_get_with_filter] // Read from the table. Console.WriteLine("Read the first row"); int rowIndex = 0; // Read a specific row. Apply a filter to return latest only cell value accross entire row. Row rowRead = bigtableClient.ReadRow( tableName, rowKey: rowKeyPrefix + rowIndex, filter: filter); Console.WriteLine( $"\tRow key: {rowRead.Key.ToStringUtf8()} " + $" -- Value: {rowRead.Families[0].Columns[0].Cells[0].Value.ToStringUtf8(),-16} " + $" -- Time Stamp: {rowRead.Families[0].Columns[0].Cells[0].TimestampMicros}"); // [END bigtable_hw_get_with_filter] // [START bigtable_hw_scan_with_filter] Console.WriteLine("Read all rows using streaming"); // stream the content of the whole table. Apply a filter to return latest only cell values accross all rows. ReadRowsStream responseRead = bigtableClient.ReadRows(tableName, filter: filter); Task printRead = PrintReadRowsAsync(); printRead.Wait(); async Task PrintReadRowsAsync() { await responseRead.ForEachAsync(row => { Console.WriteLine($"\tRow key: {row.Key.ToStringUtf8()} " + $" -- Value: {row.Families[0].Columns[0].Cells[0].Value.ToStringUtf8(),-16} " + $" -- Time Stamp: {row.Families[0].Columns[0].Cells[0].TimestampMicros}"); }); } // [END bigtable_hw_scan_with_filter] // [START bigtable_hw_delete_table] // Clean up. Delete the table. Console.WriteLine($"Delete table: {tableId}"); bigtableTableAdminClient.DeleteTable(name: tableName); if (!TableExist(bigtableTableAdminClient)) { Console.WriteLine($"Table: {tableId} deleted successfully"); } // [END bigtable_hw_delete_table] } catch (Exception ex) { Console.WriteLine($"Exception while running HelloWorld: {ex.Message}"); } }
internal void DoHelloWorld() { #region 1. Create table with column family. try { Console.WriteLine($"Create new table: {_settings.TableName} with column family {_settings.ColumnFamily}, Instance: {_settings.InstanceId}"); // Check whether a table with given TableName already exists. if (!DoesTableExist(_bigtableTableAdminClient, _tableNameAdmin)) { _bigtableTableAdminClient.CreateTable( new InstanceName(_settings.ProjectId, _settings.InstanceId), _settings.TableName, new Table { Granularity = Table.Types.TimestampGranularity.Millis, ColumnFamilies = { { _settings.ColumnFamily, new ColumnFamily { GcRule = new GcRule { MaxNumVersions = 1 } } } } }); Console.WriteLine(DoesTableExist(_bigtableTableAdminClient, _tableNameAdmin) ? $"Table {_settings.TableName} created succsessfully\n" : $"There was a problem creating a table {_settings.TableName}"); } else { Console.WriteLine($"Table: {_settings.TableName} already exist"); } #endregion #region 2. Insert multiple rows. /* Each row has a unique row key. * * Note: This example uses sequential numeric IDs for simplicity, but * this can result in poor performance in a production application. * Since rows are stored in sorted order by key, sequential keys can * result in poor distribution of operations across nodes. * * For more information about how to design a Bigtable schema for the * best performance, see the documentation: * * https://cloud.google.com/bigtable/docs/schema-design */ Console.WriteLine($"Write some greetings to the table {_settings.TableName}"); // Insert 1 row using MutateRow() _greetingIndex = 0; try { _bigtableClient.MutateRow(_tableNameClient, _settings.RowKeyPrefix + _greetingIndex, MutationBuilder(_greetingIndex)); Console.WriteLine($"\tGreeting: --{_settings.Greetings[_greetingIndex]}-- written successfully"); } catch (Exception ex) { Console.WriteLine($"\tFailed to write Greeting: --{_settings.Greetings[_greetingIndex]}"); Console.WriteLine(ex.Message); throw; } // Insert multiple rows using MutateRows() // Build a MutateRowsRequest (contains table name and a collection of entries). MutateRowsRequest request = new MutateRowsRequest { TableNameAsTableName = _tableNameClient }; _mapToOriginalGreetingIndex = new List <int>(); while (++_greetingIndex < _settings.Greetings.Length) { _mapToOriginalGreetingIndex.Add(_greetingIndex); // Build an entry for every greeting (contains of row key and a collection of mutations). request.Entries.Add(Mutations.CreateEntry(_settings.RowKeyPrefix + _greetingIndex, MutationBuilder(_greetingIndex))); } BigtableClient.MutateRowsStream response = _bigtableClient.MutateRows(request); Task write = CheckWrittenAsync(response); write.Wait(); #endregion #region Read the first row Console.WriteLine("Read the first row"); int rowIndex = 0; Row rowRead = _bigtableClient.ReadRow(_tableNameClient, _settings.RowKeyPrefix + rowIndex); Console.WriteLine( $"\tRow key: {rowRead.Key.ToStringUtf8()}, Value: {rowRead.Families[0].Columns[0].Cells[0].Value.ToStringUtf8()}"); #endregion #region Read all rows. BigtableClient.ReadRowsStream responseRead = _bigtableClient.ReadRows(_tableNameClient); Task printRead = PrintReadRowsAsync(responseRead); printRead.Wait(); #endregion #region Delete table. Console.WriteLine($"Delete table: {_settings.TableName}"); _bigtableTableAdminClient.DeleteTable(_tableNameAdmin); if (DoesTableExist(_bigtableTableAdminClient, _tableNameAdmin) == false) { Console.WriteLine($"Table: {_settings.TableName} deleted succsessfully"); } #endregion } catch (Exception ex) { Console.WriteLine(ex.Message); } }