Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support timezone for field of timestamp type #1193

Closed
kyungtaak opened this issue Jan 7, 2019 · 37 comments
Closed

Support timezone for field of timestamp type #1193

kyungtaak opened this issue Jan 7, 2019 · 37 comments
Assignees
Labels
@dashboard Component Name : Dashboard / Chart @datasource Component Name : Datasource/Connection Management enhancement Request Change and Feature Enhancement p1 Priority 1
Milestone

Comments

@kyungtaak
Copy link
Contributor

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)

@kyungtaak kyungtaak added this to the 3.2.0 milestone Jan 7, 2019
@kyungtaak kyungtaak added enhancement Request Change and Feature Enhancement @dashboard Component Name : Dashboard / Chart @datasource Component Name : Datasource/Connection Management labels Jan 7, 2019
@kyungtaak kyungtaak added the p1 Priority 1 label Jan 7, 2019
@kyungtaak
Copy link
Contributor Author

@metatron-app/design @AnnieHwang 위의 요구사항에 의하여 아래 두가지 요건이 필요합니다.

  • Timestamp Type 의 필드 적재시 timezone / locale(영어-en,한국어-ko,중국어-zh) 지정, 이 정보를 포함하여 validation 수행
  • 위젯 내 선반에 timestamp type 의 dimension (timestamp role 포함) 위치시 브라우저의 timezone / locale 정보를 가져다가 동적으로 전달하여, 해당 timezone 에 맞는 데이터를 보여주게 됩니다. (이건은 별도의 화면 기획은 필요가 없으나, 위젯/대시보드에서 데이터 조회시의 시나리오를 위한 전달 방법입니다.)

@deidera08
Copy link

@kyungtaak
질문이 있습니다

질문1- 타임존 지원 범위
가이드 주신 참고 자료(위키)에 보면 전 세계의 타임존 정보가 나오는데요, 전 세계의 타임존을 다 지원하실 예정이신지요? 또는 이 중 영미, 중국, 한국의 타임존만 지원해도 되는지요?

질문2- 타임존 설정시 영향받는 값
제가 이해한바로는 타임존 설정은 타임스탬프에 해당하며, 설정시 시각화 할 때(대시보드) 표현되는 시간값이 영향을 받는다고 생각하는데요
그렇다면 타임스탬프에 따른 (타임스탬프가 아닌)Time type의 컬럼은 영향을 안받는지요?
즉 데이터소스 > 데이터 그리드 화면에서의 데이터값들과는 무관한지 궁금합니다.

질문3- ingestion이후 수정 가부
데이터소스 > 상세정보 화면 등에서 타임존 수정이 불가해야 할까요?
가능하다면 대시보드에서도 타임존 수정을 지원해야 하는지요?

질문4- Current time일 경우 타임존
타임스탬프가 설정된 컬럼이란 유저가 타임스탬프로 지정한 컬럼일 경우와 Current time으로 자동 선택된 컬럼 둘 다 포함하는지 궁금합니다.
(Current time도 포함일 경우 ingestion 이후에 UI에서는 해당 컬럼이 노출되지 않기 때문입니다.)

@kyungtaak
Copy link
Contributor Author

@deidera08 답변드립니다.

  1. 타임존 지원 범위는 모두 나오는게 좋을것 같습니다. (콤보박스에 검색이 있어도 좋을것 같습니다.)
  2. Timestamp Role 외 Dimension Role 의 timestamp 타입도 영향을 받습니다.
    그리고 데이터 그리드에서 보여줄때는 위젯에서에서 보는것과 동일한 타임존의 영향을 받게 데이터를 전달할 예정입니다.
  3. 수정은 불가능합니다.
  4. current time 은 가려지는 값이므로, 설정이 필요없을 것으로 보입니다.

@deidera08
Copy link

@kyungtaak
빠른 답변 주셔서 감사합니닷 :)
추가 질문 드립니다.

Timestamp Role 외 Dimension Role 의 timestamp 타입도 영향을 받습니다.
그리고 데이터 그리드에서 보여줄때는 위젯에서에서 보는것과 동일한 타임존의 영향을 받게 데이터를 전달할 예정입니다.

Timestamp Role이 무엇일까요?
Timestamp로 지정한 컬럼 외에 Dimension > Date/Time 컬럼도 각각의 타임존을 설정할 수 있는건가요?
즉 한 데이터그리드 안에 Date/Time컬럼이 다중일 경우 이는 각각의 타임존을 설정할 수 있나요?

@deidera08
Copy link

@kyungtaak @AnnieHwang
다음과 같이 기획하였습니다.

Ingestion Settings > Timestamp Setting에서 타임존 설정을 할 수 있습니다.
timezone01
timezone02

설정한 타임존은 상세화면, 데이터 그리드화면, 컬럼상세 화면에 각각 정보가 노출됩니다.
timezone03
timezone04
timezone05

부족한 부분이나 잘못 표현된 부분이 있을 경우 가이드 부탁드립니다.

@kyungtaak
Copy link
Contributor Author

@deidera08

Timestamp Role이 무엇일까요?

컬럼의 역할을 measure/dimension/timestamp 이 세가지로 정의하였습니다. timestamp role 은 적재시 반드시지정해야하는 timestamp 타입의 필드를 의미하며, 컬럼중 하나만 지정할수 있습니다.

Timestamp로 지정한 컬럼 외에 Dimension > Date/Time 컬럼도 각각의 타임존을 설정할 수 있는건가요? 즉 한 데이터그리드 안에 Date/Time컬럼이 다중일 경우 이는 각각의 타임존을 설정할 수 있나요?

네 그렇게 되어야한다고 생각하고 있습니다.

@deidera08
Copy link

@kyungtaak @AnnieHwang
답변 주셔서 감사합니다

Timestamp로 지정한 컬럼 외에 Dimension > Date/Time 컬럼도 각각의 타임존을 설정할 수 있는건가요? 즉 한 데이터그리드 안에 Date/Time컬럼이 다중일 경우 이는 각각의 타임존을 설정할 수 있나요?

네 그렇게 되어야한다고 생각하고 있습니다.

답변주신대로라면 위의 와이어프레임은 잘못 설계되었네요.
이전 단계인 configuration schema단계에서 컬럼 설정시 타임존이 들어가야 할 듯 합니다.
위의 와이어프레임은 무시해주시고 다시 화면 올리도록 하겠습니다.

그리고 타임존 목록을 정리하였습니다.
참고자료로 주신 위키의 목록을 추렸습니다. (원 자료는 500개가 넘네요)
국가코드가 없거나, 도시명과 시간대가 같은 항목은 삭제했습니다.
노출방식은 "시간 국가/도시명"으로 생각하고 있습니다.
예) +09:00 Korea/서울 +09:00 Korea/Seoul
더불어 정렬순서는(위키는 대륙순이지만) 시간순서로 하면 좋을듯 합니다.
(기본값: 브라우저 시간대)

엑셀파일을 참고부탁드립니다.
#1193TimezoneList.xlsx

@kyungtaak
Copy link
Contributor Author

@deidera08 보통 TZ database 명은 국가가 아닌 대륙명을 앞에 두고 Asia/Seoul 이렇게 표기합니다.

@deidera08
Copy link

deidera08 commented Jan 9, 2019

@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

살펴보시고 의견 부탁드립니다.

@kyungtaak
Copy link
Contributor Author

@deidera08 제가 너무 개발자 스러운 코드에 빠져있었나봅니다. 경험하신 방식에 따라 진행해주시면 좋을것 같아요. ^^;

@deidera08
Copy link

@kyungtaak @AnnieHwang

Timestamp로 지정한 컬럼 외에 Dimension > Date/Time 컬럼도 각각의 타임존을 설정할 수 있는건가요? 즉 한 데이터그리드 안에 Date/Time컬럼이 다중일 경우 이는 각각의 타임존을 설정할 수 있나요?

네 그렇게 되어야한다고 생각하고 있습니다.

위의 상황에 맞춰 Date/Time type에 각각의 타임존을 설정할 수 있도록 화면 수정하였습니다.

2019-01-10 9 40 14
2019-01-10 9 40 21
2019-01-10 9 40 30
2019-01-10 9 40 40
2019-01-10 9 40 49


질문이 있습니다.
대시보드 생성시 데이터간 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 데이터값을 동일한 값으로 보는지요?

또는 타임존에 의해 변형된 시간이 같을 경우를 (위 상황과 반대) 같은 데이터값으로 보는지 궁금합니다.

@kyungtaak
Copy link
Contributor Author

@deidera08 위의 상황이라면, 엔진에서 인식되는 되는시간은 UTC(0시) 기준입니다. 따라서

  • A 컬럼의 경우 적재된 시간은 2000년 1월 1일 0시
  • B 컬럼의 경우 적재된 시간은 1999년 12월 31일 1시

사용자가 Asia/Seoul (+9) 인경우 보이는 시간값은, 아래처럼 보일거에요.

  • A 컬럼의 경우 2000년 1월 1일 9시
  • B 컬럼의 경우 1999년 12월 31일 10시

@koeun222
Copy link

koeun222 commented Jan 10, 2019

@AnnieHwang 타임존 추가 관련 디자인 공유드립니다

데이터소스 > 생성(myfile) > 스키마설정
image

데이터소스 > 상세(data grid)

  1. data grid > header area 디자인수정
  • header height 50px
  • ‘column name’ text size 13pt / Bold
  • header line color #d5d5da
  1. Time zone 추가
    image

데이터소스 > 상세(Column details)
image

@AnnieHwang
Copy link
Contributor

@kyungtaak @deidera08 데이터소스 > 상세(data grid) 에서 타임존이 컬럼 헤더(이름열) 전면에 나올정도로 중요한가요? 전 툴팁 정도로만 나오면 될것 같은데.. 어떻게 생각하세요? 너무 여러줄 헤더에 나오면 정신없을것 같아서요

@deidera08
Copy link

@AnnieHwang

@kyungtaak @deidera08 데이터소스 > 상세(data grid) 에서 타임존이 컬럼 헤더(이름열) 전면에 나올정도로 중요한가요? 전 툴팁 정도로만 나오면 될것 같은데.. 어떻게 생각하세요? 너무 여러줄 헤더에 나오면 정신없을것 같아서요

시간타입 컬럼마다 각각 타임존을 설정할 수 있다보니 Data grid화면에서 다중의 시간타입 컬럼이 각각 다른 타임존일 경우 한눈에 인지하기 어렵지 않을까 해서 전면(상단)에 해당 정보를 추가해야겠다고 생각했었는데요
말씀하신대로 컬럼명, logical 컬럼명, 타임존 정보까지 최대 3줄이 노출될 수 있어서 정보과다 노출일 수도 있을 듯 합니다.
시간타입 컬럼에 마우스오버시 툴팁으로 타임존 정보를 노출하는것으로 수정요청 하도록 하겠습니다.

@koeun222
Copy link

koeun222 commented Jan 21, 2019

@AnnieHwang @eltriny 수정된 사항 공유드립니다
데이터소스 > 상세(data grid)

  1. Time zone 추가 : Date/Time 컬럼 호버시 타임존 툴팁 노출로 수정

  2. data grid > header area 디자인수정
    -header height 36px
    -‘column name’ text size 13pt / Bold
    -header line color #d5d5da
    image

@brandon-wonjune
Copy link
Contributor

@kyungtaak
데이터소스 생성시 timestamp인 column의 timezone은 어떤 파라메터를 사용하면 되나요?

@kyungtaak
Copy link
Contributor Author

kyungtaak commented Jan 29, 2019

@deidera08 그리드 화면에서 너무 많은 타임존 정보가 노출되는게 아닌가 생각됩니다.
+9:00 또는 Asia/Seoul 또는 +9:00 Seoul 이런시긍로 축약하면 어떨런지요? 검토부탁드립니다.
현재 개발 된 화면은 아래와 같습니다.
image

@deidera08
Copy link

deidera08 commented Jan 29, 2019

@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

@eltriny
Copy link
Contributor

eltriny commented Jan 29, 2019

@kyungtaak
timezone 관련 UI 로직 제거를 위해 테스트 하는 과정에서 API 오류가 발생하여 확인 요청드립니다.
API : /api/dashboards/{dashboardId}?projection=forDetailView

Api 호출 결과 ( responseCode 는 200 이나, json 결과가 정상적으로 내려오지 않음 )
2019-01-29 5 20 32
2019-01-29 5 21 34

서버 로그

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)

@brandon-wonjune
Copy link
Contributor

@deidera08 @kyungtaak 수정하였습니다.
2019-01-29 5 29 53

@kyungtaak
Copy link
Contributor Author

kyungtaak commented Jan 29, 2019

timezone 관련 UI 로직 제거를 위해 테스트 하는 과정에서 API 오류가 발생하여 확인 요청드립니다.

@eltriny 긴급하게 Field 617 라인에 아래와 같이 수정후 확인 부탁드립니다.

fieldFormat = new CustomDateTimeFormat(format);

kyungtaak added a commit that referenced this issue Jan 29, 2019
@kyungtaak
Copy link
Contributor Author

@brandon-wonjune @eltriny 위 두건의 오류를 해결하여 올려두었습니다. 확인 부탁드립니다.

@kyungtaak
Copy link
Contributor Author

@deidera08 그리드에서 timezone 표시가 뭔가 어색하는데요. 혹시 timezone 표시 글자를 조금 줄이는 방법이나.. 다른 방법이 없을까요...?

@brandon-wonjune
Copy link
Contributor

@kyungtaak current_time으로 ingestion이 정상적으로 되는것 확인했습니다.

@deidera08
Copy link

deidera08 commented Jan 29, 2019

@kyungtaak @AnnieHwang

@deidera08 그리드에서 timezone 표시가 뭔가 어색하는데요. 혹시 timezone 표시 글자를 조금 줄이는 방법이나.. 다른 방법이 없을까요...?

더 줄인다면 다음과 같이 표기하면 어떨까 합니다.
예시값: UTC+9, UTC-11, UTC+9:30

그리고 폰트 사이즈를 한사이즈 더 작게 표현하면 어떨까 싶네요
폰트 사이즈는 @koeun222 께 요청드리도록 하겠습니다.

@koeun222
Copy link

네에 타임존 text size 11pt로 퍼블 적용 부탁드려요-

@eltriny
Copy link
Contributor

eltriny commented Jan 29, 2019

@kyungtaak
위에 문의드렸던 대시보드 정보 조회하는 API 에서 추가적으로 오류가 발생하여 문의드립니다.
API : /api/dashboards/{dashboardId}?projection=forDetailView

API 결과
2019-01-29 6 31 42

필드의 foramt 값이 위 이미지와 같이 내려와서 json parsing이 되지 않습니다.

@brandon-wonjune
Copy link
Contributor

@kyungtaak @deidera08

더 줄인다면 다음과 같이 표기하면 어떨까 합니다.
예시값: UTC+9, UTC-11, UTC+9:30

수정하였습니다.

@kyungtaak
Copy link
Contributor Author

@eltriny 죄송합니다. 제가 답변이 늦었네요. 위 오류는 수정하였습니다.

alchan-lee pushed a commit that referenced this issue Jan 31, 2019
* #1193 create schema-config service

* #1193 add country message bundle

* #1193 add continent message bundle

* #1193 add city message bundle

* #1193 add timezone list builder method

* #1193 add browser timezone set method

* #1193 add timezone search

* #1193 change schemaConfigService to timezoneSerivce

* #1193 add timezone in column detail

* #1193 if not exist timezone in field, show browser timezone

* #1193 add timezone in data preview

* #1193 add timestamp grid header

* #1193 support timezone when querying datasource

* #1193 fix css in datasource grid

* #1193 fix grid in datasource grid component

* #1193 add timezone in data preview component

* #1193 if unix type field, remove timezone

* #1193 fix type undefined error in druid type datasource

* #1193 change timezone label in grid component

* #1193 fix ingestion error using current timestamp field and apply timezon to select/groupby query

* #1193 change timezone grid label

* #1193 remove empty string in timezone grid label

* #1193 fix processing format property in Field
@kyungtaak kyungtaak removed the awaiting feedback need to feedback label Jan 31, 2019
eltriny pushed a commit that referenced this issue Jan 31, 2019
eltriny pushed a commit that referenced this issue Jan 31, 2019
eltriny pushed a commit that referenced this issue Feb 1, 2019
kyungtaak pushed a commit that referenced this issue Feb 1, 2019
* #1193 add timezone in pivot

* #1193 add timezone in shelf

* #1193 add timezone to timestamp type field
kyungtaak added a commit that referenced this issue Feb 1, 2019
* #1296 Show tooltip when snapshot file uri is shortened (#1348)

* #199 fix error input component (#1353)

* #199 change branch

* #199 remove input component in dashboard creation

* Fix range slider on map chart (#1351)

* #1057 fix error in datasource creation stage

* #1057 fix message in criterion filter

* #1057 fix database source create error

* #1057 fix file datasource error

* #1057 add default format in data source column detail used change physical type

* #1193 add timezone to dimension of timestamp type in pivot

* #1193 add timezone in pivot

* #1193 add timezone in shelf

* #1193 add timezone to timestamp type field

* #1355 fix undefined config data in interval
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
@dashboard Component Name : Dashboard / Chart @datasource Component Name : Datasource/Connection Management enhancement Request Change and Feature Enhancement p1 Priority 1
Projects
None yet
Development

No branches or pull requests

6 participants