2016-01-13 84 views
0

我正在開發c#中的控制檯應用程序,以將一組記錄插入到Google BigQuery表中。使用cdata ado.net數據提供程序插入和選擇數據。當使用for循環插入數據時,它會插入數據,但是當數據範圍超過100 000行時需要很長時間才能插入數據。Json使用cdata ado.net數據提供者插入Google BigQuery

因此,我決定插入一個包含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"); 
     } 

回答

0

Google BigQuery的CData ADO.NET提供程序支持INSERT INTO SELECT語句,您可以使用該語句使用單個請求批量插入數據。

您可以通過將行插入本地臨時表做到這一點,然後讓你的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 

編號:http://cdn.cdata.com/help/DBA/ado/pg_insertselect.htm

相關問題