This looks a bit specific and maybe it's better to allow catalogs to
customize the error message, which is more general.

On Wed, May 13, 2020 at 12:16 AM Russell Spitzer <russell.spit...@gmail.com>
wrote:

> Currently the way some actions work, we receive an error during analysis
> phase. For example, doing a "SELECT * FROM non_existent_table" will return
> an analysis exception as the NoSuchTableException is captured and replaced.
>
> Other actions like the "ShowNamespaceExec" call catalog methods directly
> and directly throw a NoSuchNamsSpaceException
>
> While I don't think the difference here is a big deal, It would be nice if
> we could have just one set of behaviors. My interest here was being able to
> throw custom NoSuchTable and NoSuchNameSpace exceptions
> which contained naming suggestions.
>
> For example
>
> *SELECT * from  catalog.keyspace.tuble*
>
> Could optionally return an analysis exception which suggested other names
> of tables (or keyspaces) which contained like
>
> "Could not find keyspace.tuble, found a near hit: keyspace.table"
>
> While I have the code to do this internally within my own catalog because
> of previous functionality,
>  I cannot surface this information to the user anymore in DSV2 because of
> the way the exceptions are handled.
>
>
> Given this, I'm wondering if we could wrap and rethrow the
> NoSuchExceptions or would it be better for catalogs to support an
> interfaces like
>
>
> trait SupportsTableNamingSuggestions extends TableCatalog {
>   val matchThreshold = 0.7
>   val matcher: (String, String) => Double = JaroWinkler // Or some other
> string comparison algorithm
>
>   /** Given an identifier, return a list of identifiers that it may have
> been mistaken for"
>   default def tableSuggestions(missingIdent: Identifier): Seq[Ident] {
>     for (table <- getTables(ident.namespace) if
> matcher(missingIdent.table, ident.table) > matchThreshold) yield {
>          table
>     }
>   }
> }
> // And another for namespaces
>
> Then on analysis failures, if the catalog supports this trait we could
> supplement the analysis failure with some helpful info. We could leave this
> as a trait for
> those implementations whose listing of tables or namespaces is costly.
>
>
> Thanks for your consideration, this is the kind of feature that I think is
> very useful to end users and we can add with pretty limited cost,
> Russ
>

Reply via email to