Nav apraksta
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

my_test.go 5.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. package main
  2. import (
  3. "fmt"
  4. "testing"
  5. "time"
  6. "git.x2erp.com/qdy/go-base/config"
  7. "git.x2erp.com/qdy/go-db/factory"
  8. )
  9. // QueryRequest 查询请求结构体
  10. type QueryRequest struct {
  11. SQL string `json:"sql"`
  12. }
  13. func TestQueryAndInsertToDoris(t *testing.T) {
  14. // 记录总开始时间
  15. totalStartTime := time.Now()
  16. // 1. 获取HTTP工厂实例
  17. httpFactory, err := factory.GetHTTPFactory()
  18. if err != nil {
  19. t.Fatalf("Failed to get HTTP factory: %v", err)
  20. }
  21. fmt.Println("HTTP factory created successfully")
  22. // 2. 创建HTTP客户端
  23. httpClient := httpFactory.CreateClient()
  24. // 3. 准备查询SQL - 限制数据量用于测试
  25. querySQL := getSQL()
  26. // 4. 准备查询请求
  27. queryRequest := QueryRequest{
  28. SQL: querySQL,
  29. }
  30. // 记录查询开始时间
  31. queryStartTime := time.Now()
  32. // 5. 发送POST请求到 /api/query/csv 获取CSV格式数据
  33. fmt.Println("Sending query request to localhost:8080/api/query/csv...")
  34. resp, err := httpClient.PostWithAuth(
  35. "http://localhost:8080/api/query/csv",
  36. queryRequest,
  37. "123", // Bearer Token
  38. nil,
  39. )
  40. if err != nil {
  41. t.Fatalf("Failed to send query request: %v", err)
  42. }
  43. if resp.StatusCode() != 200 {
  44. t.Fatalf("Query request failed with status: %d, body: %s", resp.StatusCode(), string(resp.Body()))
  45. }
  46. // 6. 获取CSV数据
  47. csvData := string(resp.Body())
  48. if len(csvData) == 0 {
  49. t.Fatalf("No CSV data received")
  50. }
  51. // 记录查询结束时间
  52. queryEndTime := time.Now()
  53. queryDuration := queryEndTime.Sub(queryStartTime)
  54. fmt.Printf("✅ Query completed in %v\n", queryDuration)
  55. fmt.Printf("Successfully retrieved CSV data, length: %d bytes\n", len(csvData))
  56. //fmt.Printf("CSV data content:\n%s\n", csvData)
  57. // 7. 获取Doris工厂实例
  58. dorisFactory, err := factory.GetDorisFactory(httpFactory)
  59. if err != nil {
  60. t.Fatalf("Failed to get Doris factory: %v", err)
  61. }
  62. fmt.Println("Doris factory created successfully")
  63. // 8. 先检查Doris表结构
  64. fmt.Println("Checking Doris table structure...")
  65. // 9. 插入数据到Doris
  66. database := "X6_STOCK_DEV"
  67. table := "A3_CLOTHING"
  68. skipHeader := false // 改为true,跳过CSV头行
  69. fmt.Printf("Inserting data to Doris database: %s, table: %s\n", database, table)
  70. //fmt.Printf("CSV data to insert:\n%q\n", csvData)
  71. cfg := config.GetConfig()
  72. url := fmt.Sprintf("http://%s:%d/api/%s/%s/_stream_load", cfg.GetDoris().FEHost, cfg.GetDoris().FEPort, database, table)
  73. fmt.Print(url + ".\n")
  74. // 记录保存开始时间
  75. saveStartTime := time.Now()
  76. err = dorisFactory.InsertCSV(database, table, csvData, skipHeader)
  77. if err != nil {
  78. t.Fatalf("Failed to insert data to Doris: %v", err)
  79. }
  80. // 记录保存结束时间
  81. saveEndTime := time.Now()
  82. saveDuration := saveEndTime.Sub(saveStartTime)
  83. fmt.Printf("✅ Data saved to Doris in %v\n", saveDuration)
  84. // 记录总结束时间
  85. totalEndTime := time.Now()
  86. totalDuration := totalEndTime.Sub(totalStartTime)
  87. // 打印性能统计
  88. fmt.Println("\n📊 Performance Statistics:")
  89. fmt.Printf(" Query Time: %v\n", queryDuration)
  90. fmt.Printf(" Save Time: %v\n", saveDuration)
  91. fmt.Printf(" Total Time: %v\n", totalDuration)
  92. fmt.Printf(" Data Size: %d bytes\n", len(csvData))
  93. fmt.Println("Data successfully inserted to Doris!")
  94. }
  95. func getSQLm() string {
  96. return `SELECT
  97. CLOTHING_ID,
  98. CLOTHING_YEAR,
  99. CLOTHING_NAME
  100. FROM X6_STOCK_DEV.A3_CLOTHING WHERE rownum <= 100000`
  101. }
  102. func getSQL() string {
  103. // 3. 准备查询SQL
  104. return `SELECT
  105. CLOTHING_ID,
  106. CLOTHING_YEAR,
  107. CLOTHING_NAME,
  108. STYLECOLOR_ID,
  109. STYLE_ID,
  110. COLOR_ID,
  111. SIZE_ID,
  112. CREATE_DATE,
  113. STYLE_GROUP,
  114. J_PRICE,
  115. X_PRICE,
  116. V_PRICE,
  117. CLERK_ROYALTYRATE,
  118. CLERK_ROYALTYPRICE,
  119. BRAND_CODE,
  120. STYLEVER_ID,
  121. J_COST,
  122. CLOTHING_IMG,
  123. STYLE_UNIT_CODE,
  124. STYLE_SEX_CODE,
  125. STYLE_KIND_CODE,
  126. STYLE_CLASS_CODE,
  127. STYLE_SUBCLASS_CODE,
  128. STYLE_DESIGNER_CODE,
  129. STYLE_PLATER_CODE,
  130. STYLE_STYLES_CODE,
  131. STYLE_LOCATE_CODE,
  132. STYLE_SALETYPE_CODE,
  133. STYLE_COLORSYSTEM_CODE,
  134. STYLE_THEME_CODE,
  135. STYLE_INDENTTYPE_CODE,
  136. STYLE_PRICEBAND_CODE,
  137. STYLE_MONTH_CODE,
  138. STYLE_COMPOSITION_CODE,
  139. STYLE_SUPPLIER_CODE,
  140. STYLE_SPARE1_CODE,
  141. STYLE_SPARE2_CODE,
  142. STYLE_SPARE4_CODE,
  143. STYLE_SPARE5_CODE,
  144. CATEGORY_CODE,
  145. BRAND_ID,
  146. STYCOLVER_ID,
  147. STYLE_SAME,
  148. CLOTHING_BARCODE,
  149. CLOTHING_HELPID,
  150. CLOTHING_GBCODE,
  151. CLOTHING_RFID,
  152. STYLE_SUBJECT_ID,
  153. SIZEGRP_ID,
  154. STYLE_HELPID,
  155. CLOTHING_GBCODE1,
  156. COLOR_NAME,
  157. STYLEVER_NAME,
  158. SIZE_NAME,
  159. STYLE_UNIT,
  160. STYLE_SEX,
  161. STYLE_KIND,
  162. STYLE_CLASS,
  163. STYLE_SUBCLASS,
  164. STYLE_DESIGNER,
  165. STYLE_PLATER,
  166. STYLE_BAND,
  167. STYLE_STYLES,
  168. STYLE_LOCATE,
  169. STYLE_SALETYPE,
  170. STYLE_COLORSYSTEM,
  171. STYLE_THEME,
  172. STYLE_INDENTTYPE,
  173. STYLE_PRICEBAND,
  174. STYLE_MONTH,
  175. STYLE_COMPOSITION,
  176. STYLE_SUPPLIER,
  177. STYLE_SPARE1,
  178. STYLE_SPARE2,
  179. STYLE_SPARE3,
  180. STYLE_SPARE4,
  181. STYLE_SPARE5,
  182. CATEGORY_NAME,
  183. BRAND_NAME,
  184. STYLE_YEAR_NAME,
  185. STYLE_SEARCH_KEY,
  186. STYLE_SUBJECT_NAME,
  187. CLOTHING_REMARK,
  188. STYLE_SPARE3_CODE,
  189. COST,
  190. BRAND_GROUPCODE,
  191. CLASS_GROUPCODE,
  192. MONTH_GROUPCODE,
  193. RETURNSUBJECT_ID,
  194. PRODUCT_SORT,
  195. CLOTHING_PARTITION
  196. FROM (
  197. SELECT a.*, ROWNUM as rn
  198. FROM (
  199. SELECT *
  200. FROM X6_STOCK_DEV.A3_CLOTHING
  201. ORDER BY CLOTHING_ID
  202. ) a
  203. WHERE ROWNUM <= 41000
  204. )
  205. WHERE rn > 39000`
  206. // FROM X6_STOCK_DEV.A3_CLOTHING WHERE rownum > 100 and rownum <= 20000`
  207. }