{"id":"csv-left-join","version":"1.0.0","description":"Left join two CSV documents on exact named key columns.","supported_operations":["csv left join","left join csv documents","left join csv on named keys"],"unsupported_operations":["inner join","right join","full outer join","fuzzy keys","numeric keys","read files","fetch urls"],"semantics":["left and right are complete CSV documents whose first records are headers.","keys names unique headers present in both documents; join uses exact string tuples with no coercion.","Output columns are the keys in listed order, then remaining left columns in left header order, then remaining right columns in right header order.","Non-key header collisions are renamed with left_suffix and right_suffix (defaults _left and _right); remaining collisions throw.","Every left data row appears; matching is a cartesian product of right rows with the same key, in left then right order.","Left rows with no match emit empty strings for right-only columns; unmatched_left_rows counts those left rows.","Empty documents without headers are rejected; header-only inputs yield the computed header and zero data rows.","A join key may not appear on more than 64 data rows on either side.","The first output header name may not begin with U+FEFF because it is ambiguous with a CSV byte-order mark."],"limits":{"max_input_bytes":256000,"max_data_rows":5000,"max_columns":256,"max_header_name_bytes":256,"max_keys":32,"max_suffix_chars":32,"max_duplicate_rows_per_key":64,"max_output_bytes":256000},"pricing":{"status":"unpriced","charge_usd":null},"input_schema":{"type":"object","additionalProperties":false,"required":["left","right","keys"],"properties":{"left":{"type":"string","maxLength":256000},"right":{"type":"string","maxLength":256000},"keys":{"type":"array","minItems":1,"maxItems":32,"uniqueItems":true,"items":{"type":"string","minLength":1}},"left_suffix":{"type":"string","minLength":1,"maxLength":32,"default":"_left"},"right_suffix":{"type":"string","minLength":1,"maxLength":32,"default":"_right"}}},"output_schema":{"type":"object","additionalProperties":false,"required":["csv","rows_out","unmatched_left_rows"],"properties":{"csv":{"type":"string"},"rows_out":{"type":"integer"},"unmatched_left_rows":{"type":"integer"}}},"examples":[{"input":{"left":"id,name\n1,Ada\n2,Lin\n3,Grace\n","right":"id,city\n1,London\n1,Paris\n4,Tokyo\n","keys":["id"]},"output":{"csv":"id,name,city\n1,Ada,London\n1,Ada,Paris\n2,Lin,\n3,Grace,\n","rows_out":4,"unmatched_left_rows":2}}],"execute_url":"/v1/tools/csv-left-join/versions/1.0.0/execute"}