"use strict";(self.webpackChunkdocs_v_2=self.webpackChunkdocs_v_2||[]).push([[7752],{95788:(e,t,n)=>{n.d(t,{Iu:()=>c,yg:()=>u});var i=n(11504);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,i,r=function(e,t){if(null==e)return{};var n,i,r={},a=Object.keys(e);for(i=0;i<a.length;i++)n=a[i],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i<a.length;i++)n=a[i],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=i.createContext({}),p=function(e){var t=i.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},c=function(e){var t=p(e.components);return i.createElement(l.Provider,{value:t},e.children)},m="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},h=i.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),m=p(n),h=r,u=m["".concat(l,".").concat(h)]||m[h]||d[h]||a;return n?i.createElement(u,o(o({ref:t},c),{},{components:n})):i.createElement(u,o({ref:t},c))}));function u(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,o=new Array(a);o[0]=h;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[m]="string"==typeof e?e:r,o[1]=s;for(var p=2;p<a;p++)o[p]=n[p];return i.createElement.apply(null,o)}return i.createElement.apply(null,n)}h.displayName="MDXCreateElement"},34496:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>d,frontMatter:()=>a,metadata:()=>s,toc:()=>p});var i=n(45072),r=(n(11504),n(95788));const a={title:"Timezones",hide_title:!0,sidebar_position:1,version:1},o=void 0,s={unversionedId:"miscellaneous/timezones",id:"miscellaneous/timezones",title:"Timezones",description:"Timezones",source:"@site/docs/miscellaneous/timezones.mdx",sourceDirName:"miscellaneous",slug:"/miscellaneous/timezones",permalink:"/docs/miscellaneous/timezones",draft:!1,editUrl:"https://github.com/apache/superset/edit/master/docs/docs/miscellaneous/timezones.mdx",tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Timezones",hide_title:!0,sidebar_position:1,version:1},sidebar:"tutorialSidebar",previous:{title:"Country Map Tools",permalink:"/docs/miscellaneous/country-map-tools"},next:{title:"Importing and Exporting Datasources",permalink:"/docs/miscellaneous/importing-exporting-datasources"}},l={},p=[{value:"Timezones",id:"timezones",level:2}],c={toc:p},m="wrapper";function d(e){let{components:t,...n}=e;return(0,r.yg)(m,(0,i.c)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.yg)("h2",{id:"timezones"},"Timezones"),(0,r.yg)("p",null,"There are four distinct timezone components which relate to Apache Superset,"),(0,r.yg)("ol",null,(0,r.yg)("li",{parentName:"ol"},"The timezone that the underlying data is encoded in."),(0,r.yg)("li",{parentName:"ol"},"The timezone of the database engine."),(0,r.yg)("li",{parentName:"ol"},"The timezone of the Apache Superset backend."),(0,r.yg)("li",{parentName:"ol"},"The timezone of the Apache Superset client.")),(0,r.yg)("p",null,"where if a temporal field (",(0,r.yg)("inlineCode",{parentName:"p"},"DATETIME"),", ",(0,r.yg)("inlineCode",{parentName:"p"},"TIME"),", ",(0,r.yg)("inlineCode",{parentName:"p"},"TIMESTAMP"),", etc.) does not explicitly define a timezone it defaults to the underlying timezone of the component."),(0,r.yg)("p",null,"To help make the problem somewhat tractable\u2014given that Apache Superset has no control on either how the data is ingested (1) or the timezone of the client (4)\u2014from a consistency standpoint it is highly recommended that both (2) and (3) are configured to use the same timezone with a strong preference given to ",(0,r.yg)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Coordinated_Universal_Time"},"UTC")," to ensure temporal fields without an explicit timestamp are not incorrectly coerced into the wrong timezone. Actually Apache Superset currently has implicit assumptions that timestamps are in UTC and thus configuring (3) to a non-UTC timezone could be problematic."),(0,r.yg)("p",null,"To strive for data consistency (regardless of the timezone of the client) the Apache Superset backend tries to ensure that any timestamp sent to the client has an explicit (or semi-explicit as in the case with ",(0,r.yg)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Unix_time"},"Epoch time")," which is always in reference to UTC) timezone encoded within."),(0,r.yg)("p",null,"The challenge however lies with the slew of ",(0,r.yg)("a",{parentName:"p",href:"/docs/databases/installing-database-drivers#install-database-drivers"},"database engines")," which Apache Superset supports and various inconsistencies between their ",(0,r.yg)("a",{parentName:"p",href:"https://www.python.org/dev/peps/pep-0249/"},"Python Database API (DB-API)")," implementations combined with the fact that we use ",(0,r.yg)("a",{parentName:"p",href:"https://pandas.pydata.org/"},"Pandas")," to read SQL into a DataFrame prior to serializing to JSON. Regrettably Pandas ignores the DB-API ",(0,r.yg)("a",{parentName:"p",href:"https://www.python.org/dev/peps/pep-0249/#type-objects"},"type_code")," relying by default on the underlying Python type returned by the DB-API. Currently only a subset of the supported database engines work correctly with Pandas, i.e., ensuring timestamps without an explicit timestamp are serializd to JSON with the server timezone, thus guaranteeing the client will display timestamps in a consistent manner irrespective of the client's timezone."),(0,r.yg)("p",null,"For example the following is a comparison of MySQL and Presto,"),(0,r.yg)("pre",null,(0,r.yg)("code",{parentName:"pre"},'import pandas as pd\nfrom sqlalchemy import create_engine\n\npd.read_sql_query(\n    sql="SELECT TIMESTAMP(\'2022-01-01 00:00:00\') AS ts",\n    con=create_engine("mysql://root@localhost:3360"),\n).to_json()\n\npd.read_sql_query(\n    sql="SELECT TIMESTAMP \'2022-01-01 00:00:00\' AS ts",\n    con=create_engine("presto://localhost:8080"),\n).to_json()\n')),(0,r.yg)("p",null,"which outputs ",(0,r.yg)("inlineCode",{parentName:"p"},'{"ts":{"0":1640995200000}}')," (which infers the UTC timezone per the Epoch time definition) and ",(0,r.yg)("inlineCode",{parentName:"p"},'{"ts":{"0":"2022-01-01 00:00:00.000"}}')," (without an explicit timezone) respectively and thus are treated differently in JavaScript:"),(0,r.yg)("pre",null,(0,r.yg)("code",{parentName:"pre"},'new Date(1640995200000)\n> Sat Jan 01 2022 13:00:00 GMT+1300 (New Zealand Daylight Time)\n\nnew Date("2022-01-01 00:00:00.000")\n> Sat Jan 01 2022 00:00:00 GMT+1300 (New Zealand Daylight Time)\n')))}d.isMDXComponent=!0}}]);