private void AssertInvalid(string name, object value) { var row = new BigQueryInsertRow(); Assert.Throws <ArgumentException>(() => row.Add(name, value)); Assert.Throws <ArgumentException>(() => row[name] = value); Assert.Throws <ArgumentException>(() => row.Add(new Dictionary <string, object> { { name, value } })); }
public static BigQueryInsertRow GetRowFromEntity(object entity, Type schemaType, string indent = "") { //Nothing to do with nulls if (entity == null) { return(null); } indent = indent.Insert(0, _spaces); var newRow = new BigQueryInsertRow(); foreach (var propertyItem in schemaType.GetProperties()) { if (IgnoreProperty(propertyItem.GetCustomAttribute <BigQuerySchemaAttribute>())) { continue; } if (IsEnumerable(propertyItem.PropertyType)) { var elementType = GetElementsType(propertyItem); if (IsClass(elementType)) { //WritePropertyMessage(propertyItem, indent, "IEnumerableOfClass"); newRow.Add(propertyItem.Name, GetClassRows((IEnumerable)propertyItem.GetValue(entity), elementType, indent)); } else { //WritePropertyMessage(propertyItem, indent, "IEnumerableOfType"); newRow.Add(propertyItem.Name, GetValueByListType(elementType, propertyItem.GetValue(entity))); } } else if (IsClass(propertyItem.PropertyType)) { //WritePropertyMessage(propertyItem, indent, "Class"); var classRow = GetRowFromEntity(propertyItem.GetValue(entity), propertyItem.PropertyType, indent); newRow.Add(propertyItem.Name, classRow); } else { //WritePropertyMessage(propertyItem, indent, "Type"); newRow.Add(propertyItem.Name, GetValueByType(propertyItem.PropertyType, propertyItem.GetValue(entity))); } } return(newRow); }
private static BigQueryInsertRow PopulateBigQueryInsertRow(DataRow dr, string[] cNames, BigQueryClient client, string datasetId, string tableName) { var bQIRow = new BigQueryInsertRow(); string type; foreach (var key in cNames) { type = GetBigQueryType(client, datasetId, tableName, key); if (type == "TIMESTAMP") { string value = DateTime.Parse((string)dr[key]).ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss"); bQIRow.Add(key, value); } else { bQIRow.Add(key, dr[key]); } } return(bQIRow); }
public Task ProcessBatchAsync(IReadOnlyList <Contact> batch, CancellationToken token) { var rows = new List <BigQueryInsertRow>(); foreach (var contact in batch) { var interactions = contact.Interactions; foreach (var interaction in interactions) { var runStarted = interaction.Events.OfType <RunStarted>().ToList(); if (runStarted.Any()) { var row = new BigQueryInsertRow(interaction.Id.ToString()) { { "ContactId", contact.Id.ToString() }, { "InteractionId", interaction.Id.ToString() }, { "RunStart", runStarted.First().Time.ToUniversalTime() } }; var runEnded = interaction.Events.OfType <RunEnded>().ToList(); if (runEnded.Any()) { row.Add("RunEnd", runEnded.First().Time.ToUniversalTime()); } rows.Add(row); } } } if (rows.Any()) { var cred = Google.Apis.Auth.OAuth2.GoogleCredential.FromFile(@"C:\dev\symposium2019\cred.json"); BigQueryClient client = BigQueryClient.Create(projectId, cred); client.InsertRows(datasetId, tableId, rows); } return(Task.Delay(1)); }
public IEnumerable <BigQueryInsertRow> MapToInsertRows <T>(IReadOnlyCollection <T> dataModels) { var publicProps = typeof(T).GetProperties(); foreach (var dataModel in dataModels) { var row = new BigQueryInsertRow(); foreach (var property in publicProps) { if (property.GetCustomAttribute <BigQueryIgnoreAttribute>() != null) { continue; } string fieldName = SnakeCaseConverter.ConvertToSnakeCase(property.Name); var fieldValue = dataInfoFactory.Get(property).MapToRowValue(property.GetValue(dataModel)); row.Add(fieldName, fieldValue); } yield return(row); } }