[
https://issues.apache.org/jira/browse/HIVE-24217?focusedWorklogId=501083&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-501083
]
ASF GitHub Bot logged work on HIVE-24217:
-----------------------------------------
Author: ASF GitHub Bot
Created on: 15/Oct/20 12:28
Start Date: 15/Oct/20 12:28
Worklog Time Spent: 10m
Work Description: zeroflag commented on a change in pull request #1542:
URL: https://github.com/apache/hive/pull/1542#discussion_r505499995
##########
File path: standalone-metastore/metastore-server/src/main/resources/package.jdo
##########
@@ -1549,6 +1549,83 @@
<column name="RM_DUMP_EXECUTION_ID"/>
</index>
</class>
+
+ <class name="MStoredProc" table="STORED_PROCS" identity-type="datastore"
detachable="true">
+ <datastore-identity>
+ <column name="SP_ID"/>
+ </datastore-identity>
+ <field name="createTime">
+ <column name="CREATE_TIME" jdbc-type="integer" allows-null="false"/>
+ </field>
+ <field name="lastAccessTime">
+ <column name="LAST_ACCESS_TIME" jdbc-type="integer"
allows-null="false"/>
+ </field>
+ <field name="database">
+ <column name="DB_ID" allows-null="false"/>
+ </field>
+ <field name="name">
+ <column name="NAME" length="256" jdbc-type="VARCHAR"
allows-null="false"/>
+ </field>
+ <field name="owner">
+ <column name="OWNER_NAME" length="128" jdbc-type="VARCHAR"
allows-null="false"/>
+ </field>
+ <field name="source">
+ <column name="SOURCE" jdbc-type="MEDIUMTEXT" allows-null="false"/>
+ </field>
+ <field name="language">
+ <column name="LANG" jdbc-type="varchar" length="128"
allows-null="false"/>
+ </field>
+ <field name="returnType">
+ <column name="RET_TYPE" jdbc-type="varchar" length="128"
allows-null="true"/>
+ </field>
+ <field name="parameters" table="SP_POS_ARGS" >
+ <collection element-type="MPosParam"/>
+ <join>
+ <column name="SP_ID"/>
+ </join>
+ <element>
+ <embedded>
+ <field name="name">
+ <column name="NAME" jdbc-type="varchar" length="256"
allows-null="false"/>
+ </field>
+ <field name="type">
+ <column name="TYPE" jdbc-type="varchar" length="128"
allows-null="false"/>
+ </field>
+ <field name="length">
+ <column name="length" jdbc-type="integer" allows-null="true"/>
+ </field>
+ <field name="scale">
+ <column name="scale" jdbc-type="integer" allows-null="true"/>
+ </field>
+ <field name="isOut">
+ <column name="OUT" allows-null="false"/>
+ </field>
+ </embedded>
+ </element>
+ </field>
Review comment:
Hey @jcamachor thanks for the feedback, I'm glad you chimed in. Maybe
there is a misunderstanding, this information is not redundant in any way,
we're making use of it when invoking a procedure. This information must be
stored somewhere in some form the only question is what representation to use.
Just to clarify, currently I store the signature in a structured way +
procedure body (without the signature) in text.
What was proposed (but @kgyrtkirk correct me if I'm wrong) as an alternative
solution is store the signature together with the body and optionally add a
signature string to the table as well (this would be redundant). I think
regardless of the representation, backward compatibility will always be a
concern.
One thing I don't like about storing the signature in text is that the
assumption that invoking the procedure will always require parsing. This is
only true for now because HPL/SQL is an AST interpreter but if we ever want to
make this performant probably we'll need to introduce a byte code VM at some
point in the near future. While creating a procedure needs parsing but invoking
it wouldn't, if we stored the byte code. How would this work in this case? I
suppose we can add runtime information into the byte code, but that's not
always an option. For example postgres allows you to invoke procedures
implemented in C where runtime information about the signature is not
available. This might be one reason why they also choose to store the signature
separately in a structured way.
Multi language support was already raised by customers and adding it would
be the easiest if we had common bytecode for different languages. One might
want to call a procedure implemented in language A from a different language B.
Then A would need to use the parser of language B to get the signature
information, if the signature was stored in text.
We can keep speculating on this, but at this point this is still an
experimental and undocumented feature, I'm open to change it later if we have
proof that one way is better than the other.
But if we decide to go with the alternative solution from now on, I suggest
we choose a language agnostic representation (JSON or whatever) of the
signature, instead of the unparsed text.
> Also, checking the documentation, it seems HPL/SQL can apply some
transformations to the field type. Are those transformations applied before
storing the definition or later on?
Yes, and that only affects create table statements.
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
Issue Time Tracking
-------------------
Worklog Id: (was: 501083)
Time Spent: 2h (was: 1h 50m)
> HMS storage backend for HPL/SQL stored procedures
> -------------------------------------------------
>
> Key: HIVE-24217
> URL: https://issues.apache.org/jira/browse/HIVE-24217
> Project: Hive
> Issue Type: Bug
> Components: Hive, hpl/sql, Metastore
> Reporter: Attila Magyar
> Assignee: Attila Magyar
> Priority: Major
> Labels: pull-request-available
> Attachments: HPL_SQL storedproc HMS storage.pdf
>
> Time Spent: 2h
> Remaining Estimate: 0h
>
> HPL/SQL procedures are currently stored in text files. The goal of this Jira
> is to implement a Metastore backend for storing and loading these procedures.
> This is an incremental step towards having fully capable stored procedures in
> Hive.
>
> See the attached design for more information.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)