ch.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package main
  2. import (
  3. "log"
  4. "time"
  5. "zero/core/stores/clickhouse"
  6. "zero/core/stores/sqlx"
  7. )
  8. func main() {
  9. conn := clickhouse.New("tcp://127.0.0.1:9000")
  10. _, err := conn.Exec(`
  11. CREATE TABLE IF NOT EXISTS example (
  12. country_code FixedString(2),
  13. os_id UInt8,
  14. browser_id UInt8,
  15. categories Array(Int16),
  16. action_day Date,
  17. action_time DateTime
  18. ) engine=Memory
  19. `)
  20. if err != nil {
  21. log.Fatal(err)
  22. }
  23. conn.Transact(func(session sqlx.Session) error {
  24. stmt, err := session.Prepare("INSERT INTO example (country_code, os_id, browser_id, categories, action_day, action_time) VALUES (?, ?, ?, ?, ?, ?)")
  25. if err != nil {
  26. log.Fatal(err)
  27. }
  28. defer stmt.Close()
  29. for i := 0; i < 10; i++ {
  30. _, err := stmt.Exec("RU", 10+i, 100+i, []int16{1, 2, 3}, time.Now(), time.Now())
  31. if err != nil {
  32. log.Fatal(err)
  33. }
  34. }
  35. return nil
  36. })
  37. var items []struct {
  38. CountryCode string `db:"country_code"`
  39. OsID uint8 `db:"os_id"`
  40. BrowserID uint8 `db:"browser_id"`
  41. Categories []int16 `db:"categories"`
  42. ActionTime time.Time `db:"action_time"`
  43. }
  44. err = conn.QueryRows(&items, "SELECT country_code, os_id, browser_id, categories, action_time FROM example")
  45. if err != nil {
  46. log.Fatal(err)
  47. }
  48. for _, item := range items {
  49. log.Printf("country: %s, os: %d, browser: %d, categories: %v, action_time: %s",
  50. item.CountryCode, item.OsID, item.BrowserID, item.Categories, item.ActionTime)
  51. }
  52. if _, err := conn.Exec("DROP TABLE example"); err != nil {
  53. log.Fatal(err)
  54. }
  55. }