Is your feature request related to a problem? Please describe.
μ μ¬λλ λ°μ΄ν° μμ€λ΄ νμμ€ν
ν νμ
μ΄ ν¬ν¨λ κ²½μ°, νμμ‘΄μ΄ μ€μ λμ΄ μμ§μμ λμ보λ μμμ λ°μ΄ν° μ‘°νμ μ¬μ©μ κΈ°μ€μ νμμ‘΄ κΈ°μ€ μκ°μ νμΈν μ μμ΅λλ€.
Describe the solution you'd like
λ°μ΄ν° μμ€ μμ±μλ λ°μ΄ν° μμ€λ΄ νμμ€ν
ν νμ
μ timezone μ μ§μ ν μ μκ³ , μ¬μ©μλ μ¬μ©μ λΈλΌμ°μ Έ νμμ‘΄μ λ§μΆ μκ° κ°μ λμ보λλ₯Ό ν΅ν΄ λ³Όμ μμ΅λλ€.
The datasource creator can set a timezone to the timestamp type in the data source, and the user can view the time value according to the user's browser timezone through the dashboard.
Describe alternatives you've considered
Additional context
(N/A)
@metatron-app/design @AnnieHwang μμ μꡬμ¬νμ μνμ¬ μλ λκ°μ§ μκ±΄μ΄ νμν©λλ€.
@kyungtaak
μ§λ¬Έμ΄ μμ΅λλ€
μ§λ¬Έ1- νμμ‘΄ μ§μ λ²μ
κ°μ΄λ μ£Όμ μ°Έκ³ μλ£(μν€)μ 보면 μ μΈκ³μ νμμ‘΄ μ λ³΄κ° λμ€λλ°μ, μ μΈκ³μ νμμ‘΄μ λ€ μ§μνμ€ μμ μ΄μ μ§μ? λλ μ΄ μ€ μλ―Έ, μ€κ΅, νκ΅μ νμμ‘΄λ§ μ§μν΄λ λλμ§μ?
μ§λ¬Έ2- νμμ‘΄ μ€μ μ μν₯λ°λ κ°
μ κ° μ΄ν΄νλ°λ‘λ νμμ‘΄ μ€μ μ νμμ€ν¬νμ ν΄λΉνλ©°, μ€μ μ μκ°ν ν λ(λμ보λ) ννλλ μκ°κ°μ΄ μν₯μ λ°λλ€κ³ μκ°νλλ°μ
κ·Έλ λ€λ©΄ νμμ€ν¬νμ λ°λ₯Έ (νμμ€ν¬νκ° μλ)Time typeμ 컬λΌμ μν₯μ μλ°λμ§μ?
μ¦ λ°μ΄ν°μμ€ > λ°μ΄ν° 그리λ νλ©΄μμμ λ°μ΄ν°κ°λ€κ³Όλ 무κ΄νμ§ κΆκΈν©λλ€.
μ§λ¬Έ3- ingestionμ΄ν μμ κ°λΆ
λ°μ΄ν°μμ€ > μμΈμ 보 νλ©΄ λ±μμ νμμ‘΄ μμ μ΄ λΆκ°ν΄μΌ ν κΉμ?
κ°λ₯νλ€λ©΄ λμ보λμμλ νμμ‘΄ μμ μ μ§μν΄μΌ νλμ§μ?
μ§λ¬Έ4- Current timeμΌ κ²½μ° νμμ‘΄
νμμ€ν¬νκ° μ€μ λ 컬λΌμ΄λ μ μ κ° νμμ€ν¬νλ‘ μ§μ ν 컬λΌμΌ κ²½μ°μ Current timeμΌλ‘ μλ μ νλ μ»¬λΌ λ λ€ ν¬ν¨νλμ§ κΆκΈν©λλ€.
(Current timeλ ν¬ν¨μΌ κ²½μ° ingestion μ΄νμ UIμμλ ν΄λΉ 컬λΌμ΄ λ
ΈμΆλμ§ μκΈ° λλ¬Έμ
λλ€.)
@deidera08 λ΅λ³λ립λλ€.
@kyungtaak
λΉ λ₯Έ λ΅λ³ μ£Όμ
μ κ°μ¬ν©λλ· :)
μΆκ° μ§λ¬Έ λ립λλ€.
Timestamp Role μΈ Dimension Role μ timestamp νμ λ μν₯μ λ°μ΅λλ€.
κ·Έλ¦¬κ³ λ°μ΄ν° 그리λμμ 보μ¬μ€λλ μμ ―μμμμ 보λκ²κ³Ό λμΌν νμμ‘΄μ μν₯μ λ°κ² λ°μ΄ν°λ₯Ό μ λ¬ν μμ μ λλ€.
Timestamp Roleμ΄ λ¬΄μμΌκΉμ?
Timestampλ‘ μ§μ ν μ»¬λΌ μΈμ Dimension > Date/Time 컬λΌλ κ°κ°μ νμμ‘΄μ μ€μ ν μ μλ건κ°μ?
μ¦ ν λ°μ΄ν°κ·Έλ¦¬λ μμ Date/Time컬λΌμ΄ λ€μ€μΌ κ²½μ° μ΄λ κ°κ°μ νμμ‘΄μ μ€μ ν μ μλμ?
@kyungtaak @AnnieHwang
λ€μκ³Ό κ°μ΄ κΈ°ννμμ΅λλ€.
Ingestion Settings > Timestamp Settingμμ νμμ‘΄ μ€μ μ ν μ μμ΅λλ€.
μ€μ ν νμμ‘΄μ μμΈνλ©΄, λ°μ΄ν° 그리λνλ©΄, 컬λΌμμΈ νλ©΄μ κ°κ° μ λ³΄κ° λ
ΈμΆλ©λλ€.
λΆμ‘±ν λΆλΆμ΄λ μλͺ» ννλ λΆλΆμ΄ μμ κ²½μ° κ°μ΄λ λΆνλ립λλ€.
@deidera08
Timestamp Roleμ΄ λ¬΄μμΌκΉμ?
컬λΌμ μν μ measure/dimension/timestamp μ΄ μΈκ°μ§λ‘ μ μνμμ΅λλ€. timestamp role μ μ μ¬μ λ°λμμ§μ ν΄μΌνλ timestamp νμ μ νλλ₯Ό μλ―Ένλ©°, 컬λΌμ€ νλλ§ μ§μ ν μ μμ΅λλ€.
Timestampλ‘ μ§μ ν μ»¬λΌ μΈμ Dimension > Date/Time 컬λΌλ κ°κ°μ νμμ‘΄μ μ€μ ν μ μλ건κ°μ? μ¦ ν λ°μ΄ν°κ·Έλ¦¬λ μμ Date/Time컬λΌμ΄ λ€μ€μΌ κ²½μ° μ΄λ κ°κ°μ νμμ‘΄μ μ€μ ν μ μλμ?
λ€ κ·Έλ κ² λμ΄μΌνλ€κ³ μκ°νκ³ μμ΅λλ€.
@kyungtaak @AnnieHwang
λ΅λ³ μ£Όμ
μ κ°μ¬ν©λλ€
Timestampλ‘ μ§μ ν μ»¬λΌ μΈμ Dimension > Date/Time 컬λΌλ κ°κ°μ νμμ‘΄μ μ€μ ν μ μλ건κ°μ? μ¦ ν λ°μ΄ν°κ·Έλ¦¬λ μμ Date/Time컬λΌμ΄ λ€μ€μΌ κ²½μ° μ΄λ κ°κ°μ νμμ‘΄μ μ€μ ν μ μλμ?
λ€ κ·Έλ κ² λμ΄μΌνλ€κ³ μκ°νκ³ μμ΅λλ€.
λ΅λ³μ£Όμ λλ‘λΌλ©΄ μμ μμ΄μ΄νλ μμ μλͺ» μ€κ³λμλ€μ.
μ΄μ λ¨κ³μΈ configuration schemaλ¨κ³μμ μ»¬λΌ μ€μ μ νμμ‘΄μ΄ λ€μ΄κ°μΌ ν λ― ν©λλ€.
μμ μμ΄μ΄νλ μμ 무μν΄μ£Όμκ³ λ€μ νλ©΄ μ¬λ¦¬λλ‘ νκ² μ΅λλ€.
κ·Έλ¦¬κ³ νμμ‘΄ λͺ©λ‘μ μ 리νμμ΅λλ€.
μ°Έκ³ μλ£λ‘ μ£Όμ μν€μ λͺ©λ‘μ μΆλ Έμ΅λλ€. (μ μλ£λ 500κ°κ° λλ€μ)
κ΅κ°μ½λκ° μκ±°λ, λμλͺ
κ³Ό μκ°λκ° κ°μ νλͺ©μ μμ νμ΅λλ€.
λ
ΈμΆλ°©μμ "μκ° κ΅κ°/λμλͺ
"μΌλ‘ μκ°νκ³ μμ΅λλ€.
μ) +09:00 Korea/μμΈ +09:00 Korea/Seoul
λλΆμ΄ μ λ ¬μμλ(μν€λ λλ₯μμ΄μ§λ§) μκ°μμλ‘ νλ©΄ μ’μλ― ν©λλ€.
(κΈ°λ³Έκ°: λΈλΌμ°μ μκ°λ)
μμ
νμΌμ μ°Έκ³ λΆνλ립λλ€.
#1193TimezoneList.xlsx
@deidera08 λ³΄ν΅ TZ database λͺ μ κ΅κ°κ° μλ λλ₯λͺ μ μμ λκ³ Asia/Seoul μ΄λ κ² νκΈ°ν©λλ€.
@kyungtaak @AnnieHwang
@deidera08 λ³΄ν΅ TZ database λͺ μ κ΅κ°κ° μλ λλ₯λͺ μ μμ λκ³ Asia/Seoul μ΄λ κ² νκΈ°ν©λλ€.
κ°μΈμ μΈ κ²½νμΉλ‘ λλΌλͺ
μ΄ μλ κ²½μ°λ₯Ό λ§μ΄ λ΄€λ ν°λΌ μμ°μ€λ½κ² λλ₯μ λΉΌκ³ λλΌλͺ
μ λ
ΈμΆμμΌ°λλ¬μ΅λλ€.
μ°λ¦¬ UIμμλ μ무λλ μ§μ (ν μ κ΅΄λ €κ°λ©°) μ νν기보λ€λ κ²μμ΄ μ£Όλ₯Ό μ΄λ£°λ― ν©λλ€.
μ μ μκ² κ²μμ΄λ₯Ό λ€μνκ² μ£ΌκΈ° μν΄μ λλΌλͺ
, λλ₯λͺ
ν¨κ» λ
ΈμΆμν€λ©΄ μ΄λ¨κΉμ?
μ) +09:00 μμΈ/λνλ―Όκ΅/μμμ +09:00 Seoul/Korea/Asia
μ΄λ°μμΌλ‘ νννλ©΄ μ’μλ― ν©λλ€.
λλΆμ΄ λλ₯λͺ
μ λ
ΈμΆμν¨λ€λ©΄ κ΅κ°μ½λκ° μλ νλͺ©λ κ΅³μ΄ λ°°μ μν¬ νμλ μλλ°μ,
κ΅κ° μ½λκ° μλ νλͺ©μ μλμ κ°μ΄ λ
ΈμΆλκ² λ€μ
μ) +09:00 μμΈ/μμμ +09:00 Seoul/Asia
μμ λ νμΌμ
λλ€.
#1193TimezoneList_v1.2.xlsx
μ΄ν΄λ³΄μκ³ μ견 λΆνλ립λλ€.
@deidera08 μ κ° λ무 κ°λ°μ μ€λ¬μ΄ μ½λμ λΉ μ Έμμλλ΄ λλ€. κ²½ννμ λ°©μμ λ°λΌ μ§νν΄μ£Όμλ©΄ μ’μκ² κ°μμ. ^^;
@kyungtaak @AnnieHwang
Timestampλ‘ μ§μ ν μ»¬λΌ μΈμ Dimension > Date/Time 컬λΌλ κ°κ°μ νμμ‘΄μ μ€μ ν μ μλ건κ°μ? μ¦ ν λ°μ΄ν°κ·Έλ¦¬λ μμ Date/Time컬λΌμ΄ λ€μ€μΌ κ²½μ° μ΄λ κ°κ°μ νμμ‘΄μ μ€μ ν μ μλμ?
λ€ κ·Έλ κ² λμ΄μΌνλ€κ³ μκ°νκ³ μμ΅λλ€.
μμ μν©μ λ§μΆ° Date/Time typeμ κ°κ°μ νμμ‘΄μ μ€μ ν μ μλλ‘ νλ©΄ μμ νμμ΅λλ€.





μ§λ¬Έμ΄ μμ΅λλ€.
λμ보λ μμ±μ λ°μ΄ν°κ° joinμ΄λ νν° μ§μ μ νμμ‘΄μ λν λ°μ΄ν°κ° ννμ΄ μν₯μ λ―ΈμΉμ§ μλμ§ κΆκΈν©λλ€.
μλ₯Όλ€μ΄ joinμ ν κ²½μ° joinλμμ A,B컬λΌμ λμΌν 2000-01-01 00:00:00μ λ μ§κ°μ΄ μλ€κ³ κ°μ νκ³
A컬λΌμ 00:00μ νμμ‘΄, B컬λΌμ +23:00μ νμμ‘΄μΌκ²½μ° λ°μ΄ν°κ° ννμ κ°κ° 2000-01-01 00:00:00, 2000-01-01 23:00:00μ΄ λ©λλ€. μ΄λ A,B λ°μ΄ν°κ°μ λμΌν κ°μΌλ‘ 보λμ§μ?
λλ νμμ‘΄μ μν΄ λ³νλ μκ°μ΄ κ°μ κ²½μ°λ₯Ό (μ μν©κ³Ό λ°λ) κ°μ λ°μ΄ν°κ°μΌλ‘ 보λμ§ κΆκΈν©λλ€.
@deidera08 μμ μν©μ΄λΌλ©΄, μμ§μμ μΈμλλ λλμκ°μ UTC(0μ) κΈ°μ€μ λλ€. λ°λΌμ
μ¬μ©μκ° Asia/Seoul (+9) μΈκ²½μ° 보μ΄λ μκ°κ°μ, μλμ²λΌ 보μΌκ±°μμ.
@AnnieHwang νμμ‘΄ μΆκ° κ΄λ ¨ λμμΈ κ³΅μ λ립λλ€
λ°μ΄ν°μμ€ > μμ±(myfile) > μ€ν€λ§μ€μ

λ°μ΄ν°μμ€ > μμΈ(data grid)
1. data grid > header area λμμΈμμ
- header height 50px
- βcolumn nameβ text size 13pt / Bold
- header line color #d5d5da
2. Time zone μΆκ°

λ°μ΄ν°μμ€ > μμΈ(Column details)

@kyungtaak @deidera08 λ°μ΄ν°μμ€ > μμΈ(data grid) μμ νμμ‘΄μ΄ μ»¬λΌ ν€λ(μ΄λ¦μ΄) μ λ©΄μ λμ¬μ λλ‘ μ€μνκ°μ? μ ν΄ν μ λλ‘λ§ λμ€λ©΄ λ κ² κ°μλ°.. μ΄λ»κ² μκ°νμΈμ? λ무 μ¬λ¬μ€ ν€λμ λμ€λ©΄ μ μ μμκ² κ°μμμ
@AnnieHwang
@kyungtaak @deidera08 λ°μ΄ν°μμ€ > μμΈ(data grid) μμ νμμ‘΄μ΄ μ»¬λΌ ν€λ(μ΄λ¦μ΄) μ λ©΄μ λμ¬μ λλ‘ μ€μνκ°μ? μ ν΄ν μ λλ‘λ§ λμ€λ©΄ λ κ² κ°μλ°.. μ΄λ»κ² μκ°νμΈμ? λ무 μ¬λ¬μ€ ν€λμ λμ€λ©΄ μ μ μμκ² κ°μμμ
μκ°νμ
컬λΌλ§λ€ κ°κ° νμμ‘΄μ μ€μ ν μ μλ€λ³΄λ Data gridνλ©΄μμ λ€μ€μ μκ°νμ
컬λΌμ΄ κ°κ° λ€λ₯Έ νμμ‘΄μΌ κ²½μ° νλμ μΈμ§νκΈ° μ΄λ ΅μ§ μμκΉ ν΄μ μ λ©΄(μλ¨)μ ν΄λΉ μ 보λ₯Ό μΆκ°ν΄μΌκ² λ€κ³ μκ°νμλλ°μ
λ§μνμ λλ‘ μ»¬λΌλͺ
, logical 컬λΌλͺ
, νμμ‘΄ μ 보κΉμ§ μ΅λ 3μ€μ΄ λ
ΈμΆλ μ μμ΄μ μ λ³΄κ³Όλ€ λ
ΈμΆμΌ μλ μμ λ― ν©λλ€.
μκ°νμ
컬λΌμ λ§μ°μ€μ€λ²μ ν΄νμΌλ‘ νμμ‘΄ μ 보λ₯Ό λ
ΈμΆνλκ²μΌλ‘ μμ μμ² νλλ‘ νκ² μ΅λλ€.
@AnnieHwang @eltriny μμ λ μ¬ν 곡μ λ립λλ€
λ°μ΄ν°μμ€ > μμΈ(data grid)

@kyungtaak
λ°μ΄ν°μμ€ μμ±μ timestampμΈ columnμ timezoneμ μ΄λ€ νλΌλ©ν°λ₯Ό μ¬μ©νλ©΄ λλμ?
@brandon-wonjune μλμ κ°μ΄ μ λ ₯ν΄μ£Όμλ©΄ λ©λλ€.
{
format: {
...
timeZone: "Asia/Seoul",
locale: "en"
}
}
@AnnieHwang @kyungtaak @brandon-wonjune
νμ¬ λ°μ΄ν°κ·Έλ¦¬λμ ν΄νμ μΆκ°νλ κ²μ΄ ꡬ쑰μ μ΄λ ΅κΈ° λλ¬Έμ
νμμ‘΄ μ 보λ₯Ό ν
μ€νΈλ‘ λ°λ‘ λ
ΈμΆμν€λ μ΄μμΌλ‘ μ°μ ꡬν λΆνλλ¦¬κ² μ΅λλ€.
@eltriny @brandon-wonjune 쿼리λ₯Ό μνμ timezone μ μν λ³λλ‘μ§μ μ κ±°ν΄μ£Όμκ³ μ. ν λΈλΌμ°μ Έ μκ° / timezone κΈ°μ€ μ 보λ₯Ό μ λ¬ν΄μ£ΌμΈμ.
@kyungtaak
ν
μ€νΈ μ€ μλμ κ°μ μν©μμ μ μ¬μ μλ¬κ° λ°μν©λλ€.
λ°μ΄ν°λ² μ΄μ€λ‘ λ°μ΄ν°μμ€ μμ± > μ°κ²°ν μ ν > ν
μ΄λΈ μ ν > current_timeμΌλ‘ timestamp μ ν > μμ± > μμΈνλ©΄μμ ingestionμ μλ¬ λ°μ
// params
{"dsType":"MASTER",
"srcType":"JDBC",
"connType":"ENGINE",
"granularity":"MONTH",
"segGranularity":"MONTH",
"name":"test",
"description":"",
"ingestion":{"dataType":"TABLE",
"type":"single",
"rollup":true,
"query":"ALL_PLUGINS",
"database":"information_schema",
"scope":"ALL"},
"fields":[{"name":"PLUGIN_NAME","alias":"PLUGIN_NAME","type":"STRING","logicalType":"STRING","role":"DIMENSION","aggrType":"NONE","seq":0},{"name":"PLUGIN_VERSION","alias":"PLUGIN_VERSION","type":"STRING","logicalType":"STRING","role":"DIMENSION","aggrType":"NONE","seq":1},{"name":"PLUGIN_STATUS","alias":"PLUGIN_STATUS","type":"STRING","logicalType":"STRING","role":"DIMENSION","aggrType":"NONE","seq":2},{"name":"PLUGIN_TYPE","alias":"PLUGIN_TYPE","type":"STRING","logicalType":"STRING","role":"DIMENSION","aggrType":"NONE","seq":3},{"name":"PLUGIN_TYPE_VERSION","alias":"PLUGIN_TYPE_VERSION","type":"STRING","logicalType":"STRING","role":"DIMENSION","aggrType":"NONE","seq":4},{"name":"PLUGIN_LIBRARY","alias":"PLUGIN_LIBRARY","type":"STRING","logicalType":"STRING","role":"DIMENSION","aggrType":"NONE","seq":5},{"name":"PLUGIN_LIBRARY_VERSION","alias":"PLUGIN_LIBRARY_VERSION","type":"STRING","logicalType":"STRING","role":"DIMENSION","aggrType":"NONE","seq":6},{"name":"PLUGIN_AUTHOR","alias":"PLUGIN_AUTHOR","type":"STRING","logicalType":"STRING","role":"DIMENSION","aggrType":"NONE","seq":7},{"name":"PLUGIN_DESCRIPTION","alias":"PLUGIN_DESCRIPTION","type":"STRING","logicalType":"STRING","role":"DIMENSION","aggrType":"NONE","seq":8},{"name":"PLUGIN_LICENSE","alias":"PLUGIN_LICENSE","type":"STRING","logicalType":"STRING","role":"DIMENSION","aggrType":"NONE","seq":9},{"name":"LOAD_OPTION","alias":"LOAD_OPTION","type":"STRING","logicalType":"STRING","role":"DIMENSION","aggrType":"NONE","seq":10},{"name":"PLUGIN_MATURITY","alias":"PLUGIN_MATURITY","type":"STRING","logicalType":"STRING","role":"DIMENSION","aggrType":"NONE","seq":11},{"name":"PLUGIN_AUTH_VERSION","alias":"PLUGIN_AUTH_VERSION","type":"STRING","logicalType":"STRING","role":"DIMENSION","aggrType":"NONE","seq":12},{"seq":13,"name":"current_datetime","type":"TIMESTAMP","role":"TIMESTAMP","derived":true,"format":{"type":"time_temporary","format":"yyyy-MM-dd HH:mm:ss"}}],
"connection":"/api/connections/c10943db-de02-4e75-9eb9-4bd6dad214d6"}
//error
app.metatron.discovery.domain.engine.EngineException: Fail to process response : [{"error":"Instantiation of [simple type, class io.druid.indexing.common.task.IndexTask] value failed: interval empty"}]
at app.metatron.discovery.domain.engine.AbstractEngineRepository.call(AbstractEngineRepository.java:126)
at app.metatron.discovery.domain.engine.AbstractEngineRepository.call(AbstractEngineRepository.java:111)
at app.metatron.discovery.domain.engine.DruidEngineRepository.ingestion(DruidEngineRepository.java:71)
at app.metatron.discovery.domain.engine.DruidEngineRepository$$FastClassBySpringCGLIB$$7c06ef0f.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:738)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:85)
at app.metatron.discovery.domain.engine.QueryServiceAspect.engineQueryProcessing(QueryServiceAspect.java:119)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:629)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:618)
at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:673)
at app.metatron.discovery.domain.engine.DruidEngineRepository$$EnhancerBySpringCGLIB$$cddeed75.ingestion(<generated>)
at app.metatron.discovery.domain.datasource.ingestion.job.AbstractIngestionJob.doIngestion(AbstractIngestionJob.java:173)
at app.metatron.discovery.domain.datasource.ingestion.job.JdbcIngestionJob.process(JdbcIngestionJob.java:160)
at app.metatron.discovery.domain.datasource.ingestion.job.IngestionJobRunner.ingestion(IngestionJobRunner.java:182)
at app.metatron.discovery.domain.datasource.DataSourceEventHandler.lambda$checkCreateAuthority$0(DataSourceEventHandler.java:230)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: app.metatron.discovery.domain.datasource.data.QueryTimeExcetpion: [{"error":"Instantiation of [simple type, class io.druid.indexing.common.task.IndexTask] value failed: interval empty"}]
at app.metatron.discovery.domain.engine.DruidEngineRepository$QueryResponseErrorHandler.handleError(DruidEngineRepository.java:115)
at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:707)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:660)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:620)
at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:538)
at app.metatron.discovery.domain.engine.AbstractEngineRepository.call(AbstractEngineRepository.java:120)
... 29 common frames omitted
@deidera08 @brandon-wonjune μλμ κ°μ΄ millis νμ
μΈ κ²½μ° timezone μλ―Έκ° μμ΄ μ€μ μ μ κ±°νλκ²μ μ΄λ μ€λ°μ§μ? νμΈ λΆνλ립λλ€.

@kyungtaak @AnnieHwang @brandon-wonjune
κ°μ΄λμ£Όμ λλ‘ Unix timeμΌ κ²½μ° timezone μ€μ μ΄ λ¬΄μλ―Ένλ―λ‘ μ€μ μ체λ₯Ό λ
ΈμΆμμν€λκ² μ’μλ― ν©λλ€.
(λ°λ¦¬μΈμ»¨, μΈμ»¨λ λͺ¨λ ν΄λΉν λ― ν©λλ€.)
@brandon-wonjune
Unix timeμ 체ν¬ν κ²½μ° timezone μ€μ μ΄ λ
ΈμΆλμ§ μλλ‘ λΆνλλ €μ
λλΆμ΄ Data grid νλ©΄μμ νμμ‘΄ μ λ³΄κ° λ
ΈμΆλλ λΆλΆμ Unix timeμΌλ‘ νκΈ°ν΄μ£Όμλ©΄ λ λ― ν©λλ€.



@kyungtaak @deidera08
unix typeμ κ²½μ° timezone μ μ κ±°νμμ΅λλ€.
μ μ©λ νλ©΄μ μλμ κ°μ΅λλ€.
μμ±μ


그리λ νλ©΄

μ»¬λΌ μμΈ


@kyungtaak
λ°μ΄ν°μμ€ μμ±μ fieldκ° unix_timeμΌλ‘ μ§μ λμ΄μλ κ²½μ°
κΈ°μ‘΄μ μ λ¬λλ timeZoneκ³Ό locale propertyλ₯Ό μ κ±°νλλ‘ μμ νμμ΅λλ€.
@deidera08 그리λ νλ©΄μμ λ무 λ§μ νμμ‘΄ μ λ³΄κ° λ
ΈμΆλλκ² μλκ° μκ°λ©λλ€.
+9:00 λλ Asia/Seoul λλ +9:00 Seoul μ΄λ°μκΈλ‘ μΆμ½νλ©΄ μ΄λ¨λ°μ§μ? κ²ν λΆνλ립λλ€.
νμ¬ κ°λ° λ νλ©΄μ μλμ κ°μ΅λλ€.

@kyungtaak @AnnieHwang
+9:00 λλ Asia/Seoul λλ +9:00 Seoul μ΄λ°μκΈλ‘ μΆμ½νλ©΄ μ΄λ¨λ°μ§μ?
'+9:00 Asia/Seoul'μ κ°μ΄ λ
ΈμΆλκ² λ μ΄μ λ Seoulκ³Ό κ°μ λμκ°μ΄ μ λΆ μ‘΄μ¬νμ§ μλλ°, κ·Έλ λ€λ©΄ λ
ΈμΆλμ΄μΌ νλ κ°μ Asiaμ κ°μ λλ₯κ°μ
λλ€. κ·Έλ¬λ λλ₯κ° μμ μμ°¨ νμ΄ λ무 컀μ λ κ° λͺ¨λ λ
ΈμΆνκ² λμμ΅λλ€.
(λΆλμ΄νκ² λμκ°μ΄ μμ κ²½μ°λ§ λλ₯κ°λ§ λ
ΈμΆ)
λλ¬Έμ 그리λνλ©΄μμ κ΅³μ΄ 1κ° μ λ³΄λ§ λ¨κΈ΄λ€λ©΄ +09:00μ κ°μ μκ°κ°μ΄μ¬μΌ ν λ― ν©λλ€.
κ·Έλ¬λ μΌλ° μ μ κ° 00:00 μ«μλ₯Ό λ΄€μλ μ΄κ²μ΄ νμμ‘΄ μ 보μΈμ§ μ λͺ¨λ₯Όκ² κ°μ λΌλ²¨κ³Ό ν¨κ» νκΈ°ν΄μΌ ν λ― ν©λλ€.
@brandon-wonjune
λ°μ΄ν° 그리λ νλ©΄μμλ§ νμμ‘΄ λ
ΈμΆ μ 보λ₯Ό 'UTC + μκ°κ°'μΌλ‘ μμ λΆνλ립λλ€.
μμ: UTC +09:00
@kyungtaak
timezone κ΄λ ¨ UI λ‘μ§ μ κ±°λ₯Ό μν΄ ν
μ€νΈ νλ κ³Όμ μμ API μ€λ₯κ° λ°μνμ¬ νμΈ μμ²λ립λλ€.
API : /api/dashboards/{dashboardId}?projection=forDetailView
Api νΈμΆ κ²°κ³Ό ( responseCode λ 200 μ΄λ, json κ²°κ³Όκ° μ μμ μΌλ‘ λ΄λ €μ€μ§ μμ )


μλ² λ‘κ·Έ
java.lang.StackOverflowError: null
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:449)
at java.lang.StringBuilder.append(StringBuilder.java:136)
at java.lang.StringBuilder.<init>(StringBuilder.java:113)
at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._reportInvalidToken(ReaderBasedJsonParser.java:2817)
at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._handleOddValue(ReaderBasedJsonParser.java:1903)
at com.fasterxml.jackson.core.json.ReaderBasedJsonParser.nextToken(ReaderBasedJsonParser.java:749)
at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:3850)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3799)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2858)
at app.metatron.discovery.common.GlobalObjectMapper.readValue(GlobalObjectMapper.java:133)
at app.metatron.discovery.domain.datasource.Field.getFormatObject(Field.java:615)
at app.metatron.discovery.domain.datasource.Field.getTimeFormat(Field.java:427)
at app.metatron.discovery.domain.datasource.Field.getFormatObject(Field.java:617)
at app.metatron.discovery.domain.datasource.Field.getTimeFormat(Field.java:427)
at app.metatron.discovery.domain.datasource.Field.getFormatObject(Field.java:617)
at app.metatron.discovery.domain.datasource.Field.getTimeFormat(Field.java:427)
at app.metatron.discovery.domain.datasource.Field.getFormatObject(Field.java:617)
at app.metatron.discovery.domain.datasource.Field.getTimeFormat(Field.java:427)
at app.metatron.discovery.domain.datasource.Field.getFormatObject(Field.java:617)
at app.metatron.discovery.domain.datasource.Field.getTimeFormat(Field.java:427)
at app.metatron.discovery.domain.datasource.Field.getFormatObject(Field.java:617)
at app.metatron.discovery.domain.datasource.Field.getTimeFormat(Field.java:427)
at app.metatron.discovery.domain.datasource.Field.getFormatObject(Field.java:617)
at app.metatron.discovery.domain.datasource.Field.getTimeFormat(Field.java:427)
at app.metatron.discovery.domain.datasource.Field.getFormatObject(Field.java:617)
at app.metatron.discovery.domain.datasource.Field.getTimeFormat(Field.java:427)
at app.metatron.discovery.domain.datasource.Field.getFormatObject(Field.java:617)
at app.metatron.discovery.domain.datasource.Field.getTimeFormat(Field.java:427)
at app.metatron.discovery.domain.datasource.Field.getFormatObject(Field.java:617)
at app.metatron.discovery.domain.datasource.Field.getTimeFormat(Field.java:427)
at app.metatron.discovery.domain.datasource.Field.getFormatObject(Field.java:617)
at app.metatron.discovery.domain.datasource.Field.getTimeFormat(Field.java:427)
at app.metatron.discovery.domain.datasource.Field.getFormatObject(Field.java:617)
at app.metatron.discovery.domain.datasource.Field.getTimeFormat(Field.java:427)
at app.metatron.discovery.domain.datasource.Field.getFormatObject(Field.java:617)
at app.metatron.discovery.domain.datasource.Field.getTimeFormat(Field.java:427)
at app.metatron.discovery.domain.datasource.Field.getFormatObject(Field.java:617)
at app.metatron.discovery.domain.datasource.Field.getTimeFormat(Field.java:427)
@deidera08 @kyungtaak μμ νμμ΅λλ€.

timezone κ΄λ ¨ UI λ‘μ§ μ κ±°λ₯Ό μν΄ ν μ€νΈ νλ κ³Όμ μμ API μ€λ₯κ° λ°μνμ¬ νμΈ μμ²λ립λλ€.
@eltriny κΈ΄κΈνκ² Field 617 λΌμΈμ μλμ κ°μ΄ μμ ν νμΈ λΆνλ립λλ€.
fieldFormat = new CustomDateTimeFormat(format);
@brandon-wonjune @eltriny μ λ건μ μ€λ₯λ₯Ό ν΄κ²°νμ¬ μ¬λ €λμμ΅λλ€. νμΈ λΆνλ립λλ€.
@deidera08 그리λμμ timezone νμκ° λκ° μ΄μνλλ°μ. νΉμ timezone νμ κΈμλ₯Ό μ‘°κΈ μ€μ΄λ λ°©λ²μ΄λ.. λ€λ₯Έ λ°©λ²μ΄ μμκΉμ...?
@kyungtaak current_timeμΌλ‘ ingestionμ΄ μ μμ μΌλ‘ λλκ² νμΈνμ΅λλ€.
@kyungtaak @AnnieHwang
@deidera08 그리λμμ timezone νμκ° λκ° μ΄μνλλ°μ. νΉμ timezone νμ κΈμλ₯Ό μ‘°κΈ μ€μ΄λ λ°©λ²μ΄λ.. λ€λ₯Έ λ°©λ²μ΄ μμκΉμ...?
λ μ€μΈλ€λ©΄ λ€μκ³Ό κ°μ΄ νκΈ°νλ©΄ μ΄λ¨κΉ ν©λλ€.
μμκ°: UTC+9, UTC-11, UTC+9:30
κ·Έλ¦¬κ³ ν°νΈ μ¬μ΄μ¦λ₯Ό νμ¬μ΄μ¦ λ μκ² νννλ©΄ μ΄λ¨κΉ μΆλ€μ
ν°νΈ μ¬μ΄μ¦λ @koeun222 κ» μμ²λ리λλ‘ νκ² μ΅λλ€.
λ€μ νμμ‘΄ text size 11ptλ‘ νΌλΈ μ μ© λΆνλλ €μ-
@kyungtaak
μμ λ¬Έμλλ Έλ λμ보λ μ 보 μ‘°ννλ API μμ μΆκ°μ μΌλ‘ μ€λ₯κ° λ°μνμ¬ λ¬Έμλ립λλ€.
API : /api/dashboards/{dashboardId}?projection=forDetailView
API κ²°κ³Ό

νλμ foramt κ°μ΄ μ μ΄λ―Έμ§μ κ°μ΄ λ΄λ €μμ json parsingμ΄ λμ§ μμ΅λλ€.
@kyungtaak @deidera08
λ μ€μΈλ€λ©΄ λ€μκ³Ό κ°μ΄ νκΈ°νλ©΄ μ΄λ¨κΉ ν©λλ€.
μμκ°: UTC+9, UTC-11, UTC+9:30
μμ νμμ΅λλ€.
@eltriny μ£μ‘ν©λλ€. μ κ° λ΅λ³μ΄ λ¦μλ€μ. μ μ€λ₯λ μμ νμμ΅λλ€.