You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hive.apache.org by "Anurag Shekhar (Jira)" <ji...@apache.org> on 2021/03/17 07:15:00 UTC
[jira] [Updated] (HIVE-24891) Tablestamp field returns a value
different from what was inserted using PreparedStaement.setLog
[ https://issues.apache.org/jira/browse/HIVE-24891?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Anurag Shekhar updated HIVE-24891:
----------------------------------
Description:
Setup
Hive Cluster Timezone - UTC
JDBC Client Timezone - IST
Create timestamp "ts = Timestamp.valueOf("2021-03-16 00:00:00.000");"
Insert using PreparedStatement (call setLong (index, ts.getTime())
Query Same field.
Return Timestamp differs from the one inserted.
Reproduction Code
{code:java}
private static String getFormattedTimestamp(Timestamp ts) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS z");
return format.format(ts);
}
public static void main (String [] arg) throws SQLException {
TimeZone.setDefault(TimeZone.getTimeZone("IST"));
Connection conn = DriverManager.getConnection ("jdbc:hive2://anurag-hwc-2.anurag-hwc.root.hwx.site:10000", "hive", "hive");
Statement stmt = conn.createStatement();
stmt.execute("drop table if exists ts_table");
stmt.execute("create table ts_table (ts timestamp) stored as orc");
PreparedStatement pStmt = conn.prepareStatement("insert into ts_table (ts) values (?)");
long timeStamp = System.currentTimeMillis();
Timestamp ts = Timestamp.valueOf("2021-03-16 00:00:00.000");
pStmt.setLong (1, ts.getTime());
pStmt.execute();
pStmt.close();
System.out.println ("Inserted " + getFormattedTimestamp(ts) + " In millis " + ts.getTime());
ResultSet rs = stmt.executeQuery("Select * from ts_table");
rs.next();
Timestamp resultTs = rs.getTimestamp(1);
System.out.println("Retrieved " + getFormattedTimestamp(resultTs) + " In millis " + resultTs.getTime());
rs.close();
} {code}
Output of above code
Inserted 2021-03-16T00:00:00.000 IST In millis 1615833000000
Retrieved 2021-03-15T18:30:00.000 IST In millis 1615813200000
Environment: (was: Setup
Hive Cluster Timezone - UTC
JDBC Client Timezone - IST
Create timestamp "ts = Timestamp.valueOf("2021-03-16 00:00:00.000");"
Insert using PreparedStatement (call setLong (index, ts.getTime())
Query Same field.
Return Timestamp differs from the one inserted.
Reproduction Code
{code:java}
private static String getFormattedTimestamp(Timestamp ts) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS z");
return format.format(ts);
}
public static void main (String [] arg) throws SQLException {
TimeZone.setDefault(TimeZone.getTimeZone("IST"));
Connection conn = DriverManager.getConnection ("jdbc:hive2://anurag-hwc-2.anurag-hwc.root.hwx.site:10000", "hive", "hive");
Statement stmt = conn.createStatement();
stmt.execute("drop table if exists ts_table");
stmt.execute("create table ts_table (ts timestamp) stored as orc");
PreparedStatement pStmt = conn.prepareStatement("insert into ts_table (ts) values (?)");
long timeStamp = System.currentTimeMillis();
Timestamp ts = Timestamp.valueOf("2021-03-16 00:00:00.000");
pStmt.setLong (1, ts.getTime());
pStmt.execute();
pStmt.close();
System.out.println ("Inserted " + getFormattedTimestamp(ts) + " In millis " + ts.getTime());
ResultSet rs = stmt.executeQuery("Select * from ts_table");
rs.next();
Timestamp resultTs = rs.getTimestamp(1);
System.out.println("Retrieved " + getFormattedTimestamp(resultTs) + " In millis " + resultTs.getTime());
rs.close();
} {code}
Output of above code
Inserted 2021-03-16T00:00:00.000 IST In millis 1615833000000
Retrieved 2021-03-15T18:30:00.000 IST In millis 1615813200000)
> Tablestamp field returns a value different from what was inserted using PreparedStaement.setLog
> -----------------------------------------------------------------------------------------------
>
> Key: HIVE-24891
> URL: https://issues.apache.org/jira/browse/HIVE-24891
> Project: Hive
> Issue Type: Bug
> Components: JDBC
> Reporter: Anurag Shekhar
> Priority: Minor
>
> Setup
> Hive Cluster Timezone - UTC
> JDBC Client Timezone - IST
> Create timestamp "ts = Timestamp.valueOf("2021-03-16 00:00:00.000");"
> Insert using PreparedStatement (call setLong (index, ts.getTime())
> Query Same field.
> Return Timestamp differs from the one inserted.
> Reproduction Code
> {code:java}
> private static String getFormattedTimestamp(Timestamp ts) {
> SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS z");
> return format.format(ts);
> }
> public static void main (String [] arg) throws SQLException {
> TimeZone.setDefault(TimeZone.getTimeZone("IST"));
> Connection conn = DriverManager.getConnection ("jdbc:hive2://anurag-hwc-2.anurag-hwc.root.hwx.site:10000", "hive", "hive");
> Statement stmt = conn.createStatement();
> stmt.execute("drop table if exists ts_table");
> stmt.execute("create table ts_table (ts timestamp) stored as orc");
> PreparedStatement pStmt = conn.prepareStatement("insert into ts_table (ts) values (?)");
> long timeStamp = System.currentTimeMillis();
> Timestamp ts = Timestamp.valueOf("2021-03-16 00:00:00.000");
> pStmt.setLong (1, ts.getTime());
> pStmt.execute();
> pStmt.close();
> System.out.println ("Inserted " + getFormattedTimestamp(ts) + " In millis " + ts.getTime());
> ResultSet rs = stmt.executeQuery("Select * from ts_table");
> rs.next();
> Timestamp resultTs = rs.getTimestamp(1);
> System.out.println("Retrieved " + getFormattedTimestamp(resultTs) + " In millis " + resultTs.getTime());
> rs.close();
> } {code}
>
> Output of above code
> Inserted 2021-03-16T00:00:00.000 IST In millis 1615833000000
> Retrieved 2021-03-15T18:30:00.000 IST In millis 1615813200000
--
This message was sent by Atlassian Jira
(v8.3.4#803005)