Re: [HACKERS] ASOF join

Поиск
Список
Период
Сортировка
От Konstantin Knizhnik
Тема Re: [HACKERS] ASOF join
Дата
Msg-id 03badc07-5314-808a-2441-99842f21950d@postgrespro.ru
обсуждение исходный текст
Ответ на Re: [HACKERS] ASOF join  (David Fetter <david@fetter.org>)
Ответы Re: [HACKERS] ASOF join  (Thomas Munro <thomas.munro@enterprisedb.com>)
Re: [HACKERS] ASOF join  (Thomas Munro <thomas.munro@enterprisedb.com>)
Список pgsql-hackers

On 16.06.2017 19:07, David Fetter wrote:
> On Fri, Jun 16, 2017 at 11:51:34AM +1200, Thomas Munro wrote:
>> On Fri, Jun 16, 2017 at 4:20 AM, Konstantin Knizhnik
>> <k.knizhnik@postgrespro.ru> wrote:
>>> I wonder if there were some discussion/attempts to add ASOF join to Postgres
>>> (sorry, may be there is better term for it, I am refereeing KDB definition:
>>> http://code.kx.com/wiki/Reference/aj ).
>> Interesting idea.  Also in Pandas:
>>
>> http://pandas.pydata.org/pandas-docs/version/0.19.0/generated/pandas.merge_asof.html#pandas.merge_asof

I attached simple patch adding ASOF join to Postgres. Right now it 
support only outer join and requires USING clause (consequently it is 
not possible to join two tables which joi keys has different names. May 
be it is also possible to support ON clause with condition written like 
o.k1 = i.k2 AND o.k2 = i.k2 AND ... AND o.kN >= i.kN
But such notation can be confusing, because join result includes only 
one matching inner record with kN smaller or equal than kN of outer 
record and not all such records.
As alternative we can add specia

If people fin such construction really useful, I will continue work on it.


>>
>> I suppose you could write a function that pulls tuples out of a bunch
>> of cursors and zips them together like this, as a kind of hand-coded
>> special merge join "except that we match on nearest key rather than
>> equal keys" (as they put it).
>>
>> I've written code like this before in a trading context, where we
>> called that 'previous tick interpolation', and in a scientific context
>> where other kinds of interpolation were called for (so not really
>> matching a tuple but synthesising one if no exact match).  If you view
>> the former case as a kind of degenerate case of interpolation then it
>> doesn't feel like a "join" as we know it, but clearly it is.  I had
>> never considered before that such things might belong inside the
>> database as a kind of join operator.
> If you turn your head sideways, it's very similar to the range merge
> join Jeff Davis proposed.  https://commitfest.postgresql.org/14/1106/

May be, but I do not understand how to limit result to contain exactly 
one (last) inner tuple for each outer tuple.

-- 
Konstantin Knizhnik
Postgres Professional: http://www.postgrespro.com
The Russian Postgres Company


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Вложения

В списке pgsql-hackers по дате отправления:

Предыдущее
От: Dean Rasheed
Дата:
Сообщение: [HACKERS] Rules on table partitions
Следующее
От: Oleksandr Shulgin
Дата:
Сообщение: [HACKERS] psql's \d and \dt are sending their complaints to different output files