Json 使用 cdata ado.net 数据提供程序插入 Google BigQuery
Json Insert in Google BigQuery using cdata ado.net data providers
我正在用 C# 开发一个控制台应用程序,以将一组记录插入到 Google BigQuery 表中。对于插入和选择数据,我使用 cdata ado.net 数据提供者。用for循环插入数据时,当数据范围超过100000行时,会插入数据但需要很长时间才能插入。
所以我决定插入一个包含 json 格式数据行的 json 文件,而不是执行一组字符串查询。
但我完全不知道该怎么做以及从哪里开始?有没有其他方法可以在 C#-->BigQuery 中实现相同的功能?
private static DataTable GetDataTableTest(string Query)
{
DataTable dt = null;
SqlDm SqlDM = new SqlDm(ConfigurationManager.ConnectionStrings["SQLData"].ToString());
SqlDM.StoredProcedureName = Query;
dt = SqlDM.ExecuteDataTable();
SqlDM = null;
return dt;
}
private static void ADDToBigQueryTest()
{
string FileToInsert = "select Top 10 * from SalesTable";
string InsertQuery = string.Empty;
DataTable dt = GetDataTable(FileToInsert);
if (dt != null && dt.Rows.Count > 0)
{
StringBuilder sbQuery = new StringBuilder();
for (int i = 0; i < dt.Rows.Count; i++)
{
sbQuery.AppendLine(dt.Rows[i][1].ToString());
}
InsertQuery = sbQuery.ToString();
}
using (GoogleBigQueryConnection BigCon = new GoogleBigQueryConnection(ConfigurationManager.ConnectionStrings["BigQuery"].ToString()))
{
GoogleBigQueryCommand BigCmd = new GoogleBigQueryCommand(InsertQuery, BigCon);
BigCmd.ExecuteNonQuery();
}
Console.WriteLine("\n Inserted To BigQuery");
}
Google BigQuery 的 CData ADO.NET 提供程序支持 INSERT INTO SELECT 语句,您可以使用它通过单个请求批量插入数据。
您可以通过将行插入到本地临时 table 中来执行此操作,然后进行 INSERT INTO SELECT 调用:
INSERT INTO publicdata:samples.github_nested#TEMP (repository.name, MyCustomField__c) VALUES ('New publicdata:samples.github_nested', '9000');
INSERT INTO publicdata:samples.github_nested#TEMP (repository.name, MyCustomField__c) VALUES ('New publicdata:samples.github_nested 2', '9001');
INSERT INTO publicdata:samples.github_nested#TEMP (repository.name, MyCustomField__c) VALUES ('New publicdata:samples.github_nested 3', '9002');
然后执行:
INSERT INTO publicdata:samples.github_nested (repository.name, MyCustomField__c) SELECT repository.name, MyCustomField__c FROM publicdata:samples.github_nested#TEMP
我正在用 C# 开发一个控制台应用程序,以将一组记录插入到 Google BigQuery 表中。对于插入和选择数据,我使用 cdata ado.net 数据提供者。用for循环插入数据时,当数据范围超过100000行时,会插入数据但需要很长时间才能插入。
所以我决定插入一个包含 json 格式数据行的 json 文件,而不是执行一组字符串查询。
但我完全不知道该怎么做以及从哪里开始?有没有其他方法可以在 C#-->BigQuery 中实现相同的功能?
private static DataTable GetDataTableTest(string Query)
{
DataTable dt = null;
SqlDm SqlDM = new SqlDm(ConfigurationManager.ConnectionStrings["SQLData"].ToString());
SqlDM.StoredProcedureName = Query;
dt = SqlDM.ExecuteDataTable();
SqlDM = null;
return dt;
}
private static void ADDToBigQueryTest()
{
string FileToInsert = "select Top 10 * from SalesTable";
string InsertQuery = string.Empty;
DataTable dt = GetDataTable(FileToInsert);
if (dt != null && dt.Rows.Count > 0)
{
StringBuilder sbQuery = new StringBuilder();
for (int i = 0; i < dt.Rows.Count; i++)
{
sbQuery.AppendLine(dt.Rows[i][1].ToString());
}
InsertQuery = sbQuery.ToString();
}
using (GoogleBigQueryConnection BigCon = new GoogleBigQueryConnection(ConfigurationManager.ConnectionStrings["BigQuery"].ToString()))
{
GoogleBigQueryCommand BigCmd = new GoogleBigQueryCommand(InsertQuery, BigCon);
BigCmd.ExecuteNonQuery();
}
Console.WriteLine("\n Inserted To BigQuery");
}
Google BigQuery 的 CData ADO.NET 提供程序支持 INSERT INTO SELECT 语句,您可以使用它通过单个请求批量插入数据。
您可以通过将行插入到本地临时 table 中来执行此操作,然后进行 INSERT INTO SELECT 调用:
INSERT INTO publicdata:samples.github_nested#TEMP (repository.name, MyCustomField__c) VALUES ('New publicdata:samples.github_nested', '9000');
INSERT INTO publicdata:samples.github_nested#TEMP (repository.name, MyCustomField__c) VALUES ('New publicdata:samples.github_nested 2', '9001');
INSERT INTO publicdata:samples.github_nested#TEMP (repository.name, MyCustomField__c) VALUES ('New publicdata:samples.github_nested 3', '9002');
然后执行:
INSERT INTO publicdata:samples.github_nested (repository.name, MyCustomField__c) SELECT repository.name, MyCustomField__c FROM publicdata:samples.github_nested#TEMP